LUCAS WILLEMS
Un étudiant de 27 ans passionné par les maths et la programmation
Un étudiant de 27 ans passionné par les maths et la programmation
Voici un résumé de l'énoncé du problème 21 "Amicable numbers" du Project Euler (traduction complète en français ici) :
Evaluate the sum of all the amicable numbers under 10000.
Reformulons le problème : il nous faut trouver la somme de tous les nombres amicaux inférieurs à 10000. Pour résoudre ce problème, le plus simple, je pense, est de tester, pour tous les nombres \(n\) inférieurs à 1, si, lorsque \(m = d(n)\) (la fonction \(d(n)\) étant la somme des diviseurs de \(n\)), \(n = d(m)\).
Voici donc le programme Python que nous pouvons utiliser pour résoudre ce problème :
def divisors(nb, extremum = False): divisors = [] inf = 1 if extremum else 2 for i in range(inf, int(nb**0.5)+1): q, r = divmod(nb, i) if r == 0: if q >= i: divisors.append(i) if q > i: divisors.append(nb//i) return divisors #La fonction d prend en paramètre un nombre et retourne la somme des #diviseurs de n, n étant exclu def d(nb): return 1 + sum(divisors(nb)) resultat = 0 for a in range(1, 10000): b = d(a) if d(b) == a and a != b: resultat += a print(resultat)
Le programme étant relativement simple, je n'ai pas d'explications supplémentaires à donner si ce n'est que la fonction "divisors" est explicité dans cet article.
La réponse à ce problème est 31626.
Voici les recherches relatives à cette page :
Qu'en pensez-vous ? Donnez moi votre avis (positif ou négatif) pour que je puisse l'améliorer.