Advertisement
Unoblueboy

Factor code thing stuff

Aug 2nd, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.38 KB | None | 0 0
  1. from fractions import gcd
  2. from time import time
  3. from decimal import Decimal
  4. import threading, _thread
  5. from primesieve import generate_primes
  6.  
  7. hard_start = 2
  8. hard_end = 80000
  9.  
  10.  
  11. class CustomThread(threading.Thread):
  12.     def __init__(self, func, start, end, filename):
  13.         threading.Thread.__init__(self)
  14.         self.func = func
  15.         self.begin = start
  16.         self.end = end
  17.         self.filename = filename+" {} to {}".format(self.begin, self.end)
  18.         self.primes = generate_primes(self.begin, self.end)
  19.  
  20.     def repeat_write(self, html=False):
  21.         total_time = 0
  22.         if html:
  23.             with open(self.filename+'.html', 'w+') as file:
  24.                 file.write("""<!DOCTYPE html>
  25.                     <HTML>
  26.                         <Head>
  27.                         </Head>
  28.                         <Body>
  29.                         <table>
  30.                             <tr>
  31.                                 <th>Number (N)</th>
  32.                                 <th>Seconds</th>
  33.                                 <th>result</th>
  34.                             </tr>
  35.                     """)
  36.                 for x in range(self.begin,self.end):
  37.                     if x in self.primes or x%2 == 0:
  38.                         pass
  39.                     else:
  40.                         secs, result = self.func(x)
  41.                         text = """
  42.                         <tr>
  43.                             <th>{}</th>
  44.                             <th>{}</th>
  45.                             <th>{}</th>
  46.                         </tr>""".format(x, secs, result)
  47.                         file.write(text)
  48.                         total_time+=secs
  49.                 file.write("""
  50.                         </table>
  51.                         Total time was: {} seconds
  52.                         </Body>
  53.                         </HTML>
  54.                             """.format(total_time))
  55.         else:
  56.             with open(self.filename+'.txt', 'w+') as file:
  57.                 file.write("""Number, Seconds, result""")
  58.                 for x in range(self.begin,self.end):
  59.                     if x in self.primes or x%2 == 0:
  60.                         pass
  61.                     else:
  62.                         secs, result = self.func(x)
  63.                         text = """
  64. {}, {}, {}""".format(x, secs, result)
  65.                         file.write(text)
  66.                         total_time+=secs
  67.  
  68.     def run(self):
  69.         self.repeat_write()
  70.  
  71. def timeit(func):
  72.     def inner(*args,**kwargs):
  73.         start = time()
  74.         result = func(*args, **kwargs)
  75.         end=time()
  76.         ellapsed = end - start
  77.         return (ellapsed, result)
  78.     return inner
  79.  
  80. @timeit
  81. def factorise(N):
  82.     N=Decimal(N)
  83.     for i in range(2,int(N.sqrt())+2):
  84.         if N/i == N//i:
  85.             factor=i
  86.             break
  87.     else:
  88.         return 0
  89.     return [factor, int(N)//factor]
  90.  
  91. @timeit
  92. def p_rho_algorithm(N, func = lambda x: x**2 + 1):
  93.     x=y=2
  94.     d=1
  95.     while d==1:
  96.         x = func(x)%N
  97.         y = func(func(y)%N)%N
  98.         d = gcd(abs(x-y), N)
  99.     else:
  100.         return [d, N//d]
  101.     return 0
  102.  
  103. thread1 = CustomThread( factorise, hard_start, hard_end, 'factorise')
  104. thread2 = CustomThread( p_rho_algorithm, hard_start, hard_end, 'p_rho_algorithm')
  105.  
  106. thread1.start()
  107. thread2.start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement