|
|
modulus = 6891450384315732539396789682275657542479668912536150109513790160209623422243491736087683183289411687640864567753786613451161759120554247759349511699125301598951605099378508850372543631423596795951899700429969112842764913119068299
assert(modulus.is_prime())
Fp = GF(modulus)
generator = Fp(0); for i in range(0, 20): i = Fp(i); neg_i = Fp(-i) if not(i.is_primitive_root() or neg_i.is_primitive_root()): continue elif i.is_primitive_root(): assert(i.is_primitive_root()); print("Generator: %d" % i) generator = i break else: assert(neg_i.is_primitive_root()); print("Generator: %d" % neg_i) generator = neg_i break
two_adicity = valuation(modulus - 1, 2); trace = (modulus - 1) / 2**two_adicity; two_adic_root_of_unity = generator^trace print("2-adic Root of Unity: %d " % two_adic_root_of_unity)
|