Voici la méthode la plus 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 les facteurs premiers et leur multiplicité assez rapidement. J'ai un générateur qui génère des facteurs de cette façon :
(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 dans quelle mesure c'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 de la
for i in divisorGen(100):
print i
sortir ça :
1
2
4
5
10
20
25
50
100
UPDATE : Un grand merci à Greg Hewgill et à sa "méthode intelligente" :) Calculer tous les diviseurs de 100000000 a pris 0.01s avec sa méthode contre les 39s que la méthode idiote a pris sur ma machine, très cool :D
UPDATE 2 : Arrêtez de dire que c'est une copie de este post. Calculer le nombre de diviseurs d'un nombre donné ne nécessite pas 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 les réponses avant de poster, si vous ne comprenez pas le sujet, n'ajoutez pas de réponses inutiles et déjà données.
0 votes
La raison pour laquelle il a été suggéré que cette question était presque une duplication de la question "Algorithme pour calculer le nombre de diviseurs d'un nombre donné" était que la première étape suggérée dans cette question était de trouver tous les diviseurs ce qui, je crois, est exactement ce que vous essayiez de faire ?
5 votes
Andrew, pour trouver le nombre de diviseurs, il suffit de trouver les facteurs premiers et de les utiliser pour compter le nombre de diviseurs. Trouver des diviseurs n'est pas nécessaire dans ce cas.
1 votes
@Andrea Ambu, veuillez corriger les noms de vos fonctions.
13 votes
Hey toi qui lis ça 12 ans plus tard, ce que tu veux c'est
sympy.divisors