Advertisement
roman_gemini

Function 01 Optimized

Jun 20th, 2015
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.15 KB | None | 0 0
  1. __author__ = 'Roman'
  2.  
  3. import math, time
  4.  
  5.  
  6. def is_factor(number: int):
  7.     return lambda factor: number % factor == 0
  8.  
  9.  
  10. def factors(number: int):
  11.     f = list(filter(is_factor(number), range(1, int(math.sqrt(number)) + 1)))
  12.     return sorted(f + list(map(lambda x: int(number / x), f)))
  13.  
  14.  
  15. def factors_old(number: int):
  16.     return list(filter(is_factor(number), range(1, number + 1)))
  17.  
  18.  
  19. def num_factors(number: int):
  20.     return len(factors(number))
  21.  
  22.  
  23. def is_simple(number: int) -> bool:
  24.     return num_factors(number) == 2
  25.  
  26.  
  27. def simple(limit: int):
  28.     return list(filter(is_simple, range(1, limit + 1)))
  29.  
  30.  
  31. def next_simple(initial, predicate, calculate):
  32.     while True:
  33.         if predicate(initial) is True:
  34.             return initial
  35.         initial = calculate(initial)
  36.  
  37.  
  38. def inc(value: int) -> int:
  39.     return value + 1
  40.  
  41.  
  42. def dec(value: int) -> int:
  43.     return value - 1
  44.  
  45.  
  46. def simple_after(number: int):
  47.     return next_simple(number + 1, is_simple, inc)
  48.  
  49. start = time.clock()
  50. print(factors_old(10000000))
  51. print("Time", time.clock() - start)
  52.  
  53. start = time.clock()
  54. print(factors(10000000))
  55. print("Time", time.clock() - start)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement