fork(1) download
  1.  
  2. def divisores(num):
  3. for i in range(1, num // 2 + 1):
  4. if num % i == 0:
  5. yield i
  6. yield num
  7.  
  8. from math import sqrt
  9. def divisores_otimizado(num):
  10. yield 1 # 1 é divisor de qualquer número
  11. for i in range(2, int(sqrt(num)) + 1):
  12. if num % i == 0:
  13. yield i
  14. outro_divisor = num // i
  15. if outro_divisor != i:
  16. yield outro_divisor
  17. yield num
  18.  
  19. import numpy as np
  20. def divisores_numpy(num):
  21. n = np.arange(1,num)
  22. d = num % n
  23. zeros = d == 0
  24. return n[zeros]
  25.  
  26. from timeit import timeit
  27.  
  28. # executa 1 vez cada teste
  29. params = { 'number' : 1, 'globals': globals() }
  30.  
  31. num = 47587950
  32. print(timeit('for _ in divisores(num): pass', **params))
  33. print(timeit('for _ in divisores_numpy(num): pass', **params))
  34. print(timeit('for _ in divisores_otimizado(num): pass', **params))
  35. print(timeit('for _ in sorted(divisores_otimizado(num)): pass', **params))
  36.  
Success #stdin #stdout 2.55s 817396KB
stdin
Standard input is empty
stdout
1.5070940149889793
0.8452539440186229
0.0004349829978309572
0.00045987701741978526