def divisores(num):
for i in range(1, num // 2 + 1):
if num % i == 0:
yield i
yield num
from math import sqrt
def divisores_otimizado(num):
yield 1 # 1 é divisor de qualquer número
for i in range(2, int(sqrt(num)) + 1):
if num % i == 0:
yield i
outro_divisor = num // i
if outro_divisor != i:
yield outro_divisor
yield num
import numpy as np
def divisores_numpy(num):
n = np.arange(1,num)
d = num % n
zeros = d == 0
return n[zeros]
from timeit import timeit
# executa 1 vez cada teste
params = { 'number' : 1, 'globals': globals() }
num = 47587950
print(timeit('for _ in divisores(num): pass', **params))
print(timeit('for _ in divisores_numpy(num): pass', **params))
print(timeit('for _ in divisores_otimizado(num): pass', **params))
print(timeit('for _ in sorted(divisores_otimizado(num)): pass', **params))
CmRlZiBkaXZpc29yZXMobnVtKToKICAgIGZvciBpIGluIHJhbmdlKDEsIG51bSAvLyAyICsgMSk6CiAgICAgICAgaWYgbnVtICUgaSA9PSAwOiAKICAgICAgICAgICAgeWllbGQgaQogICAgeWllbGQgbnVtCgpmcm9tIG1hdGggaW1wb3J0IHNxcnQKZGVmIGRpdmlzb3Jlc19vdGltaXphZG8obnVtKToKICAgIHlpZWxkIDEgIyAxIMOpIGRpdmlzb3IgZGUgcXVhbHF1ZXIgbsO6bWVybwogICAgZm9yIGkgaW4gcmFuZ2UoMiwgaW50KHNxcnQobnVtKSkgKyAxKToKICAgICAgICBpZiBudW0gJSBpID09IDA6CiAgICAgICAgICAgIHlpZWxkIGkKICAgICAgICAgICAgb3V0cm9fZGl2aXNvciA9IG51bSAvLyBpCiAgICAgICAgICAgIGlmIG91dHJvX2Rpdmlzb3IgIT0gaToKICAgICAgICAgICAgICAgIHlpZWxkIG91dHJvX2Rpdmlzb3IKICAgIHlpZWxkIG51bQoKaW1wb3J0IG51bXB5IGFzIG5wCmRlZiBkaXZpc29yZXNfbnVtcHkobnVtKToKICAgIG4gPSBucC5hcmFuZ2UoMSxudW0pCiAgICBkID0gbnVtICUgbgogICAgemVyb3MgPSBkID09IDAKICAgIHJldHVybiBuW3plcm9zXQoKZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdAoKIyBleGVjdXRhIDEgdmV6IGNhZGEgdGVzdGUKcGFyYW1zID0geyAnbnVtYmVyJyA6IDEsICdnbG9iYWxzJzogZ2xvYmFscygpIH0KCm51bSA9IDQ3NTg3OTUwCnByaW50KHRpbWVpdCgnZm9yIF8gaW4gZGl2aXNvcmVzKG51bSk6IHBhc3MnLCAqKnBhcmFtcykpCnByaW50KHRpbWVpdCgnZm9yIF8gaW4gZGl2aXNvcmVzX251bXB5KG51bSk6IHBhc3MnLCAqKnBhcmFtcykpCnByaW50KHRpbWVpdCgnZm9yIF8gaW4gZGl2aXNvcmVzX290aW1pemFkbyhudW0pOiBwYXNzJywgKipwYXJhbXMpKQpwcmludCh0aW1laXQoJ2ZvciBfIGluIHNvcnRlZChkaXZpc29yZXNfb3RpbWl6YWRvKG51bSkpOiBwYXNzJywgKipwYXJhbXMpKQo=