Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.63 KB | None | 0 0
  1. def peel(a, p):
  2. # Returns (k, b) such that a = p^k * b and gcd(b, p) = 1.
  3. if a == 0: return (1, 0)
  4. k = 0
  5. while a % p == 0:
  6. k += 1
  7. a = a // p
  8. return (k, a)
  9.  
  10. def is_quadratic_residue(a, n):
  11. a = a % n
  12. if a == 0: return True
  13. for (p, e) in factor(n):
  14. (k, b) = peel(a % p**e, p)
  15. if b == 0: continue
  16. if k % 2: return False
  17. if p == 2:
  18. if e == 1: continue
  19. if b % 4 != 1: return False
  20. if e >= 3 and b % 8 != 1: return False
  21. else:
  22. if power_mod(b, (p - 1)//2, p) != 1:
  23. return False
  24. return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement