Voici la manière très stupide:
def divisorGenerator(n):
for i in xrange(1,n/2+1):
if n%i == 0: yield i
yield n
Le résultat que j'aimerais obtenir est similaire à celui-ci, mais j'aimerais un algorithme plus intelligent (celui-ci est trop lent et stupide :-)
Je peux trouver assez rapidement les facteurs premiers et leur multiplicité. J'ai un générateur qui génère un facteur de cette manière:
(facteur1, multiplicité1)
(facteur2, multiplicité2)
(facteur3, multiplicité3)
et ainsi de suite ...
c'est-à-dire la sortie de
for i in factorGenerator(100):
print i
est:
(2, 2)
(5, 2)
Je ne sais pas à quel point cela est utile pour ce que je veux faire (je l'ai codé pour d'autres problèmes), de toute façon j'aimerais une façon plus intelligente de faire
for i in divisorGen(100):
print i
sortie ceci:
1
2
4
5
10
20
25
50
100
MISE À JOUR: Un grand merci à Greg Hewgill et sa "manière intelligente" :) Le calcul de tous les diviseurs de 100000000 a pris 0,01s avec son chemin contre les 39 que la manière stupide a pris sur ma machine, très cool: D
MISE À JOUR 2: Arrêtez de dire que c'est un double de ce message. Le calcul du nombre de diviseurs d'un nombre donné n'a pas besoin de calculer tous les diviseurs. C'est un problème différent, si vous pensez que ce n'est pas le cas, cherchez "Fonction Diviseur" sur wikipedia. Lisez les questions et la réponse avant de poster, si vous ne comprenez pas quel est le sujet, n'ajoutez simplement pas les réponses inutiles et déjà données.