You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

28 lines
899 B

  1. modulus = 5237311370989869175293026848905079641021338739994243633972937865128169101571388346632361720473792365177258871486054600656048925740061347509722287043067341250552640264308621296888446513816907173362124418513727200975392177480577
  2. assert(modulus.is_prime())
  3. Fp = GF(modulus)
  4. generator = Fp(0);
  5. for i in range(0, 20):
  6. i = Fp(i);
  7. neg_i = Fp(-i)
  8. if not(i.is_primitive_root() or neg_i.is_primitive_root()):
  9. continue
  10. elif i.is_primitive_root():
  11. assert(i.is_primitive_root());
  12. print("Generator: %d" % i)
  13. generator = i
  14. break
  15. else:
  16. assert(neg_i.is_primitive_root());
  17. print("Generator: %d" % neg_i)
  18. generator = neg_i
  19. break
  20. two_adicity = valuation(modulus - 1, 2);
  21. trace = (modulus - 1) / 2**two_adicity;
  22. two_adic_root_of_unity = generator^trace
  23. print("2-adic Root of Unity: %d " % two_adic_root_of_unity)