def find_primitive_roots(degree): roots = [] n = pow(modulus, degree) for i in range(2, n): e = decimal_to_base_n(i, modulus) p = PolynomialOnRing(e) if(is_primitive_root(p)): roots.append(p) return roots
def find_minimal_polynomial(polynomial): zero = PolynomialOnRing([0]) i = 1 while True: minimal_polynomial = decimal_to_base_n(i, modulus) p = PolynomialOnRing([0]) for degree, coefficient in enumerate(reversed(minimal_polynomial)): c = PolynomialOnRing([coefficient]) p += c * pow(polynomial, degree) if(p == zero): return PolynomialOnRing(minimal_polynomial) i += 1