Guest User

Untitled

a guest
Jan 20th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.53 KB | None | 0 0
  1. def fermat_factor(n):
  2. assert n % 2 != 0 # Odd integers only
  3.  
  4. a = gmpy2.ceil(gmpy2.sqrt(n))
  5. b2 = gmpy2.square(a) - n
  6. while not is_square(b2):
  7. a += 1
  8. b2 = gmpy2.square(a) - n
  9.  
  10. factor1 = a + gmpy2.sqrt(b2)
  11. factor2 = a - gmpy2.sqrt(b2)
  12. return int(factor1), int(factor2)
  13.  
  14. def is_square(n):
  15. root = gmpy2.sqrt(n)
  16. return root % 1 == 0 # '4.0' will pass, '4.1212' won't
  17.  
  18. factor1 = a + gmpy2.sqrt(b2)
  19. factor2 = a - gmpy2.sqrt(b2)
  20.  
  21. factor1 = factor2 = gmpy2.sqrt(b2)
  22. factor1 += a
  23. factor2 -= a
Add Comment
Please, Sign In to add comment