Exemple #1
0
def is_polynomial_irreducible(f, p):
    """
    Rabin's polynomial irreducibility test over finite fields.
    """
    gf_degree = len(f) - 1

    if gf_degree <= 1:
        return True

    monic_field = galois_field_monic(f, p)

    compare_polynomial = [1, 0]

    indices = {gf_degree // i for i in factorint(gf_degree)}

    monomial_base = gf_frobenius_monomial_base(monic_field, p, ZZ)
    h = monomial_base[1]

    for i in range(1, gf_degree):
        if i in indices:
            g = gf_sub(h, compare_polynomial, p, ZZ)

            if gf_gcd(monic_field, g, p, ZZ) != [1]:
                return False

        h = gf_frobenius_map(h, monic_field, monomial_base, p, ZZ)

    return h == compare_polynomial
Exemple #2
0
def test_gf_gcd():
    assert gf_gcd([], [], 11, ZZ) == []
    assert gf_gcd([2], [], 11, ZZ) == [1]
    assert gf_gcd([], [2], 11, ZZ) == [1]
    assert gf_gcd([2], [2], 11, ZZ) == [1]

    assert gf_gcd([], [1,0], 11, ZZ) == [1,0]
    assert gf_gcd([1,0], [], 11, ZZ) == [1,0]

    assert gf_gcd([3,0], [3,0], 11, ZZ) == [1,0]
    assert gf_gcd([1,8,7], [1,7,1,7], 11, ZZ) == [1,7]
Exemple #3
0
def test_gf_gcd():
    assert gf_gcd(ZZ.map([]), ZZ.map([]), 11, ZZ) == []
    assert gf_gcd(ZZ.map([2]), ZZ.map([]), 11, ZZ) == [1]
    assert gf_gcd(ZZ.map([]), ZZ.map([2]), 11, ZZ) == [1]
    assert gf_gcd(ZZ.map([2]), ZZ.map([2]), 11, ZZ) == [1]

    assert gf_gcd(ZZ.map([]), ZZ.map([1, 0]), 11, ZZ) == [1, 0]
    assert gf_gcd(ZZ.map([1, 0]), ZZ.map([]), 11, ZZ) == [1, 0]

    assert gf_gcd(ZZ.map([3, 0]), ZZ.map([3, 0]), 11, ZZ) == [1, 0]
    assert gf_gcd(ZZ.map([1, 8, 7]), ZZ.map([1, 7, 1, 7]), 11, ZZ) == [1, 7]
Exemple #4
0
def test_gf_gcd():
    assert gf_gcd(ZZ.map([]), ZZ.map([]), 11, ZZ) == []
    assert gf_gcd(ZZ.map([2]), ZZ.map([]), 11, ZZ) == [1]
    assert gf_gcd(ZZ.map([]), ZZ.map([2]), 11, ZZ) == [1]
    assert gf_gcd(ZZ.map([2]), ZZ.map([2]), 11, ZZ) == [1]

    assert gf_gcd(ZZ.map([]), ZZ.map([1, 0]), 11, ZZ) == [1, 0]
    assert gf_gcd(ZZ.map([1, 0]), ZZ.map([]), 11, ZZ) == [1, 0]

    assert gf_gcd(ZZ.map([3, 0]), ZZ.map([3, 0]), 11, ZZ) == [1, 0]
    assert gf_gcd(ZZ.map([1, 8, 7]), ZZ.map([1, 7, 1, 7]), 11, ZZ) == [1, 7]
def test_gf_euclidean():
    assert gf_gcd([], [], 11, ZZ) == []
    assert gf_gcd([2], [], 11, ZZ) == [1]
    assert gf_gcd([], [2], 11, ZZ) == [1]
    assert gf_gcd([2], [2], 11, ZZ) == [1]

    assert gf_gcd([], [1, 0], 11, ZZ) == [1, 0]
    assert gf_gcd([1, 0], [], 11, ZZ) == [1, 0]

    assert gf_gcd([3, 0], [3, 0], 11, ZZ) == [1, 0]

    assert gf_gcd([1, 8, 7], [1, 7, 1, 7], 11, ZZ) == [1, 7]

    assert gf_gcdex([], [], 11, ZZ) == ([1], [], [])
    assert gf_gcdex([2], [], 11, ZZ) == ([6], [], [1])
    assert gf_gcdex([], [2], 11, ZZ) == ([], [6], [1])
    assert gf_gcdex([2], [2], 11, ZZ) == ([], [6], [1])

    assert gf_gcdex([], [3, 0], 11, ZZ) == ([], [4], [1, 0])
    assert gf_gcdex([3, 0], [], 11, ZZ) == ([4], [], [1, 0])

    assert gf_gcdex([3, 0], [3, 0], 11, ZZ) == ([], [4], [1, 0])

    assert gf_gcdex([1, 8, 7], [1, 7, 1, 7], 11, ZZ) == ([5, 6], [6], [1, 7])
def test_gf_euclidean():
    assert gf_gcd([], [], 11, ZZ) == []
    assert gf_gcd([2], [], 11, ZZ) == [1]
    assert gf_gcd([], [2], 11, ZZ) == [1]
    assert gf_gcd([2], [2], 11, ZZ) == [1]

    assert gf_gcd([], [1,0], 11, ZZ) == [1,0]
    assert gf_gcd([1,0], [], 11, ZZ) == [1,0]

    assert gf_gcd([3,0], [3,0], 11, ZZ) == [1,0]

    assert gf_gcd([1,8,7], [1,7,1,7], 11, ZZ) == [1,7]

    assert gf_gcdex([], [], 11, ZZ) == ([1], [], [])
    assert gf_gcdex([2], [], 11, ZZ) == ([6], [], [1])
    assert gf_gcdex([], [2], 11, ZZ) == ([], [6], [1])
    assert gf_gcdex([2], [2], 11, ZZ) == ([], [6], [1])

    assert gf_gcdex([], [3,0], 11, ZZ) == ([], [4], [1,0])
    assert gf_gcdex([3,0], [], 11, ZZ) == ([4], [], [1,0])

    assert gf_gcdex([3,0], [3,0], 11, ZZ) == ([], [4], [1,0])

    assert gf_gcdex([1,8,7], [1,7,1,7], 11, ZZ) == ([5,6], [6], [1,7])