Ecco il modo molto stupido:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Il risultato che vorrei ottenere è simile a questo, ma vorrei un algoritmo più intelligente (questo è troppo lento e stupido :-)
Riesco a trovare i fattori primi e la loro molteplicità abbastanza velocemente. Ho un generatore che genera factor in questo modo:
(fattore1, molteplicità1)
(fattore2, molteplicità2)
(fattore3, molteplicità3)
e così via ...
cioè l'output di
for i in factorGenerator(100):
print i
è:
(2, 2)
(5, 2)
Non so quanto sia utile per quello che voglio fare (l'ho codificato per altri problemi), comunque vorrei un modo più intelligente per fare
for i in divisorGen(100):
print i
output questo:
1
2
4
5
10
20
25
50
100
AGGIORNAMENTO: Mille grazie a Greg Hewgill e al suo "modo intelligente" :) Calcolare tutti i divisori di 100000000 ha impiegato 0,01 secondi contro i 39 che il modo stupido ha preso sulla mia macchina, molto bello: D
AGGIORNAMENTO 2: Smettila di dire che questo è un duplicato di questo post. Calcolare il numero di divisori di un dato numero non ha bisogno di calcolare tutti i divisori. È un problema diverso, se pensi che non lo sia, cerca "Funzione Divisor" su wikipedia. Leggi le domande e la risposta prima di postare, se non capisci qual è l'argomento non aggiungere risposte non utili e già date.
