Advertisement
Manioc

Fermat

Nov 14th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.71 KB | None | 0 0
  1. import math
  2. import sys
  3.  
  4. factors = []
  5.  
  6. def isqrt(number):
  7.     return (int(math.sqrt(number)))
  8.  
  9. def fermat(number):
  10.     global factors
  11.  
  12.     while number % 2 == 0:
  13.         number = number/2
  14.         factors.append(2)
  15.  
  16.     if number == 1:
  17.         return
  18.  
  19.     r = isqrt(number)
  20.     is_prime = True
  21.     while r < (number+1)/2:
  22.         m = (r ** 2) - number
  23.  
  24.         if m >= 0 and math.sqrt(m) == math.floor( math.sqrt(m) ):
  25.             s = isqrt(m)
  26.             fermat(r - s)
  27.             fermat(r + s)
  28.  
  29.             is_prime = False
  30.             return
  31.  
  32.         r = r+1
  33.      
  34.     if is_prime == True:
  35.         factors.append(number)
  36.  
  37.  
  38. num = int(raw_input())
  39.  
  40. fermat(num)
  41.  
  42. print factors
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement