Exemple #1
0
def test_modgcd_bivariate_integers():
    R, x, y = ring("x,y", ZZ)

    f, g = R.zero, R.zero
    assert modgcd(f, g) == (0, 0, 0)

    f, g = 2 * x, R(2)
    assert modgcd(f, g) == (2, x, 1)

    f, g = x + 2 * y, x + y
    assert modgcd(f, g) == (1, f, g)

    f, g = x**2 + 2 * x * y + y**2, x**3 + y**3
    assert modgcd(f, g) == (x + y, x + y, x**2 - x * y + y**2)

    f, g = x * y**2 + 2 * x * y + x, x * y**3 + x
    assert modgcd(f, g) == (x * y + x, y + 1, y**2 - y + 1)

    f, g = x**2 * y**2 + x**2 * y + 1, x * y**2 + x * y + 1
    assert modgcd(f, g) == (1, f, g)

    f = 2 * x * y**2 + 4 * x * y + 2 * x + y**2 + 2 * y + 1
    g = 2 * x * y**3 + 2 * x + y**3 + 1
    assert modgcd(f, g) == (2 * x * y + 2 * x + y + 1, y + 1, y**2 - y + 1)

    f, g = 2 * x**2 + 4 * x + 2, x + 1
    assert modgcd(f, g) == (x + 1, 2 * x + 2, 1)

    f, g = x + 1, 2 * x**2 + 4 * x + 2
    assert modgcd(f, g) == (x + 1, 1, 2 * x + 2)

    f = 2 * x**2 + 4 * x * y - 2 * x - 4 * y
    g = x**2 + x - 2
    assert modgcd(f, g) == (x - 1, 2 * x + 4 * y, x + 2)

    f = 2 * x**2 + 2 * x * y - 3 * x - 3 * y
    g = 4 * x * y - 2 * x + 4 * y**2 - 2 * y
    assert modgcd(f, g) == (x + y, 2 * x - 3, 4 * y - 2)
Exemple #2
0
def test_modgcd_multivariate_integers():
    R, x, y = ring("x,y", ZZ)

    f, g = R.zero, R.zero
    assert modgcd(f, g) == (0, 0, 0)

    f, g = 2 * x**2 + 4 * x + 2, x + 1
    assert modgcd(f, g) == (x + 1, 2 * x + 2, 1)

    f, g = x + 1, 2 * x**2 + 4 * x + 2
    assert modgcd(f, g) == (x + 1, 1, 2 * x + 2)

    f = 2 * x**2 + 2 * x * y - 3 * x - 3 * y
    g = 4 * x * y - 2 * x + 4 * y**2 - 2 * y
    assert modgcd(f, g) == (x + y, 2 * x - 3, 4 * y - 2)

    f, g = x * y**2 + 2 * x * y + x, x * y**3 + x
    assert modgcd(f, g) == (x * y + x, y + 1, y**2 - y + 1)

    f, g = x**2 * y**2 + x**2 * y + 1, x * y**2 + x * y + 1
    assert modgcd(f, g) == (1, f, g)

    f = x**4 + 8 * x**3 + 21 * x**2 + 22 * x + 8
    g = x**3 + 6 * x**2 + 11 * x + 6

    h = x**2 + 3 * x + 2

    cff = x**2 + 5 * x + 4
    cfg = x + 3

    assert modgcd(f, g) == (h, cff, cfg)

    R, x, y, z, u = ring("x,y,z,u", ZZ)

    f, g = x + y + z, -x - y - z - u
    assert modgcd(f, g) == (1, f, g)

    f, g = u**2 + 2 * u + 1, 2 * u + 2
    assert modgcd(f, g) == (u + 1, u + 1, 2)

    f, g = z**2 * u**2 + 2 * z**2 * u + z**2 + z * u + z, u**2 + 2 * u + 1
    h, cff, cfg = u + 1, z**2 * u + z**2 + z, u + 1

    assert modgcd(f, g) == (h, cff, cfg)
    assert modgcd(g, f) == (h, cfg, cff)

    f, g, h = (1199999999999991 * x**17 - y, 2 * y - 19989798798 + x**211,
               12 * x * y**7 + x**4 - 1)
    for i in range(10):
        assert modgcd(f * h, g * h) == (h, f, g)

    R, x, y, z = ring("x,y,z", ZZ)

    f, g = x - y * z, x - y * z
    assert modgcd(f, g) == (x - y * z, 1, 1)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g

    R, x, y, z, u, v = ring("x,y,z,u,v", ZZ)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g

    R, x, y, z, u, v, a, b = ring("x,y,z,u,v,a,b", ZZ)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g

    R, x, y, z, u, v, a, b, c, d = ring("x,y,z,u,v,a,b,c,d", ZZ)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g

    R, x, y, z = ring("x,y,z", ZZ)

    f, g, h = R.fateman_poly_F_2()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g

    f, g, h = R.fateman_poly_F_3()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g

    R, x, y, z, t = ring("x,y,z,t", ZZ)

    f, g, h = R.fateman_poly_F_3()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H * cff == f and H * cfg == g
Exemple #3
0
def test_modgcd_univariate_integers():
    R, x = ring("x", ZZ)

    f, g = R.zero, R.zero
    assert modgcd(f, g) == (0, 0, 0)

    f, g = R.zero, x
    assert modgcd(f, g) == (x, 0, 1)
    assert modgcd(g, f) == (x, 1, 0)

    f, g = R.zero, -x
    assert modgcd(f, g) == (x, 0, -1)
    assert modgcd(g, f) == (x, -1, 0)

    f, g = 2 * x, R(2)
    assert modgcd(f, g) == (2, x, 1)

    f, g = 2 * x + 2, 6 * x**2 - 6
    assert modgcd(f, g) == (2 * x + 2, 1, 3 * x - 3)

    f, g = [1000000000000 * x + 998549000000] * 2

    assert modgcd(f, g) == (f, 1, 1)

    f, g = 999530000000 * x + 1000000000000, 999530000000 * x + 999999000000

    assert modgcd(f, g) == (1000000, 999530 * x + 1000000, 999530 * x + 999999)

    f = x**4 + 8 * x**3 + 21 * x**2 + 22 * x + 8
    g = x**3 + 6 * x**2 + 11 * x + 6

    h = x**2 + 3 * x + 2

    cff = x**2 + 5 * x + 4
    cfg = x + 3

    assert modgcd(f, g) == (h, cff, cfg)

    f = x**4 - 4
    g = x**4 + 4 * x**2 + 4

    h = x**2 + 2

    cff = x**2 - 2
    cfg = x**2 + 2

    assert modgcd(f, g) == (h, cff, cfg)

    f = x**8 + x**6 - 3 * x**4 - 3 * x**3 + 8 * x**2 + 2 * x - 5
    g = 3 * x**6 + 5 * x**4 - 4 * x**2 - 9 * x + 21

    h = 1

    cff = f
    cfg = g

    assert modgcd(f, g) == (h, cff, cfg)

    f = - 352518131239247345597970242177235495263669787845475025293906825864749649589178600387510272*x**49 \
        + 46818041807522713962450042363465092040687472354933295397472942006618953623327997952*x**42 \
        + 378182690892293941192071663536490788434899030680411695933646320291525827756032*x**35 \
        + 112806468807371824947796775491032386836656074179286744191026149539708928*x**28 \
        - 12278371209708240950316872681744825481125965781519138077173235712*x**21 \
        + 289127344604779611146960547954288113529690984687482920704*x**14 \
        + 19007977035740498977629742919480623972236450681*x**7 \
        + 311973482284542371301330321821976049

    g = 365431878023781158602430064717380211405897160759702125019136*x**21 \
        + 197599133478719444145775798221171663643171734081650688*x**14 \
        - 9504116979659010018253915765478924103928886144*x**7 \
        - 311973482284542371301330321821976049

    assert modgcd(f, f.diff(x))[0] == g

    f = 1317378933230047068160 * x + 2945748836994210856960
    g = 120352542776360960 * x + 269116466014453760

    h = 120352542776360960 * x + 269116466014453760
    cff = 10946
    cfg = 1

    assert modgcd(f, g) == (h, cff, cfg)
def test_modgcd_bivariate_integers():
    R, x, y = ring("x,y", ZZ)

    f, g = R.zero, R.zero
    assert modgcd(f, g) == (0, 0, 0)

    f, g = 2*x, R(2)
    assert modgcd(f, g) == (2, x, 1)

    f, g = x + 2*y, x + y
    assert modgcd(f, g) == (1, f, g)

    f, g = x**2 + 2*x*y + y**2, x**3 + y**3
    assert modgcd(f, g) == (x + y, x + y, x**2 - x*y + y**2)

    f, g = x*y**2 + 2*x*y + x, x*y**3 + x
    assert modgcd(f, g) == (x*y + x, y + 1, y**2 - y + 1)

    f, g = x**2*y**2 + x**2*y + 1, x*y**2 + x*y + 1
    assert modgcd(f, g) == (1, f, g)

    f = 2*x*y**2 + 4*x*y + 2*x + y**2 + 2*y + 1
    g = 2*x*y**3 + 2*x + y**3 + 1
    assert modgcd(f, g) == (2*x*y + 2*x + y + 1, y + 1, y**2 - y + 1)

    f, g = 2*x**2 + 4*x + 2, x + 1
    assert modgcd(f, g) == (x + 1, 2*x + 2, 1)

    f, g = x + 1, 2*x**2 + 4*x + 2
    assert modgcd(f, g) == (x + 1, 1, 2*x + 2)

    f = 2*x**2 + 4*x*y - 2*x - 4*y
    g = x**2 + x - 2
    assert modgcd(f, g) == (x - 1, 2*x + 4*y, x + 2)

    f = 2*x**2 + 2*x*y - 3*x - 3*y
    g = 4*x*y - 2*x + 4*y**2 - 2*y
    assert modgcd(f, g) == (x + y, 2*x - 3, 4*y - 2)
def test_modgcd_multivariate_integers():
    R, x, y = ring("x,y", ZZ)

    f, g = R.zero, R.zero
    assert modgcd(f, g) == (0, 0, 0)

    f, g = 2*x**2 + 4*x + 2, x + 1
    assert modgcd(f, g) == (x + 1, 2*x + 2, 1)

    f, g = x + 1, 2*x**2 + 4*x + 2
    assert modgcd(f, g) == (x + 1, 1, 2*x + 2)

    f = 2*x**2 + 2*x*y - 3*x - 3*y
    g = 4*x*y - 2*x + 4*y**2 - 2*y
    assert modgcd(f, g) == (x + y, 2*x - 3, 4*y - 2)

    f, g = x*y**2 + 2*x*y + x, x*y**3 + x
    assert modgcd(f, g) == (x*y + x, y + 1, y**2 - y + 1)

    f, g = x**2*y**2 + x**2*y + 1, x*y**2 + x*y + 1
    assert modgcd(f, g) == (1, f, g)

    f = x**4 + 8*x**3 + 21*x**2 + 22*x + 8
    g = x**3 + 6*x**2 + 11*x + 6

    h = x**2 + 3*x + 2

    cff = x**2 + 5*x + 4
    cfg = x + 3

    assert modgcd(f, g) == (h, cff, cfg)

    R, x, y, z, u = ring("x,y,z,u", ZZ)

    f, g = x + y + z, -x - y - z - u
    assert modgcd(f, g) == (1, f, g)

    f, g = u**2 + 2*u + 1, 2*u + 2
    assert modgcd(f, g) == (u + 1, u + 1, 2)

    f, g = z**2*u**2 + 2*z**2*u + z**2 + z*u + z, u**2 + 2*u + 1
    h, cff, cfg = u + 1, z**2*u + z**2 + z, u + 1

    assert modgcd(f, g) == (h, cff, cfg)
    assert modgcd(g, f) == (h, cfg, cff)

    f, g, h = (1199999999999991*x**17 - y, 2*y - 19989798798 + x**211,
               12*x*y**7 + x**4 - 1)
    for i in range(10):
        assert modgcd(f*h, g*h) == (h, f, g)

    R, x, y, z = ring("x,y,z", ZZ)

    f, g = x - y*z, x - y*z
    assert modgcd(f, g) == (x - y*z, 1, 1)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g

    R, x, y, z, u, v = ring("x,y,z,u,v", ZZ)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g

    R, x, y, z, u, v, a, b = ring("x,y,z,u,v,a,b", ZZ)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g

    R, x, y, z, u, v, a, b, c, d = ring("x,y,z,u,v,a,b,c,d", ZZ)

    f, g, h = R.fateman_poly_F_1()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g

    R, x, y, z = ring("x,y,z", ZZ)

    f, g, h = R.fateman_poly_F_2()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g

    f, g, h = R.fateman_poly_F_3()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g

    R, x, y, z, t = ring("x,y,z,t", ZZ)

    f, g, h = R.fateman_poly_F_3()
    H, cff, cfg = modgcd(f, g)

    assert H == h and H*cff == f and H*cfg == g
def test_modgcd_univariate_integers():
    R, x = ring("x", ZZ)

    f, g = R.zero, R.zero
    assert modgcd(f, g) == (0, 0, 0)

    f, g = R.zero, x
    assert modgcd(f, g) == (x, 0, 1)
    assert modgcd(g, f) == (x, 1, 0)

    f, g = R.zero, -x
    assert modgcd(f, g) == (x, 0, -1)
    assert modgcd(g, f) == (x, -1, 0)

    f, g = 2*x, R(2)
    assert modgcd(f, g) == (2, x, 1)

    f, g = 2*x + 2, 6*x**2 - 6
    assert modgcd(f, g) == (2*x + 2, 1, 3*x - 3)

    f, g = [1000000000000*x + 998549000000]*2

    assert modgcd(f, g) == (f, 1, 1)

    f, g = 999530000000*x + 1000000000000, 999530000000*x + 999999000000

    assert modgcd(f, g) == (1000000, 999530*x + 1000000, 999530*x + 999999)

    f = x**4 + 8*x**3 + 21*x**2 + 22*x + 8
    g = x**3 + 6*x**2 + 11*x + 6

    h = x**2 + 3*x + 2

    cff = x**2 + 5*x + 4
    cfg = x + 3

    assert modgcd(f, g) == (h, cff, cfg)

    f = x**4 - 4
    g = x**4 + 4*x**2 + 4

    h = x**2 + 2

    cff = x**2 - 2
    cfg = x**2 + 2

    assert modgcd(f, g) == (h, cff, cfg)

    f = x**8 + x**6 - 3*x**4 - 3*x**3 + 8*x**2 + 2*x - 5
    g = 3*x**6 + 5*x**4 - 4*x**2 - 9*x + 21

    h = 1

    cff = f
    cfg = g

    assert modgcd(f, g) == (h, cff, cfg)

    f = - 352518131239247345597970242177235495263669787845475025293906825864749649589178600387510272*x**49 \
        + 46818041807522713962450042363465092040687472354933295397472942006618953623327997952*x**42 \
        + 378182690892293941192071663536490788434899030680411695933646320291525827756032*x**35 \
        + 112806468807371824947796775491032386836656074179286744191026149539708928*x**28 \
        - 12278371209708240950316872681744825481125965781519138077173235712*x**21 \
        + 289127344604779611146960547954288113529690984687482920704*x**14 \
        + 19007977035740498977629742919480623972236450681*x**7 \
        + 311973482284542371301330321821976049

    g = 365431878023781158602430064717380211405897160759702125019136*x**21 \
        + 197599133478719444145775798221171663643171734081650688*x**14 \
        - 9504116979659010018253915765478924103928886144*x**7 \
        - 311973482284542371301330321821976049

    assert modgcd(f, f.diff(x))[0] == g

    f = 1317378933230047068160*x + 2945748836994210856960
    g = 120352542776360960*x + 269116466014453760

    h = 120352542776360960*x + 269116466014453760
    cff = 10946
    cfg = 1

    assert modgcd(f, g) == (h, cff, cfg)