LUCAS WILLEMS
Un étudiant passionné par les maths et la programmation
Un étudiant passionné par les maths et la programmation
Voici un résumé de l'énoncé du problème 3 "Largest prime factor" du Project Euler (traduction complète en français ici) :
What is the largest prime factor of the number 600851475143 ?
Reformulons notre problème : il s'agit de trouver le plus grand facteur de 600851475143 qui soit premier. Grâce à cette reformulation, nous pouvons distinguer les différentes étapes de la résolution de notre problème :
Voici une des solutions possibles, en Python, pour résoudre ce problème :
def is_prime(nb):
if nb == 1:
return False
if nb == 2:
return True
elif nb%2 == 0:
return False
for i in range(3, int(nb**0.5)+1, 2):
if nb%i == 0:
return False
return True
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
#Tri des diviseurs dans l'ordre décroissant
divs = divisors(600851475143)
divs.sort(reverse=True)
#Lit un par un les diviseurs et teste s'ils sont premiers.
#Si c'est le cas, on affiche le diviseur et sort de la boucle.
for i in divs:
if is_prime(i):
print(i)
breakComme les fonctions \(\text{is_prime}\) et \(\text{divisors}\) ne sont pas des fonctions spécifiques à ce problème, les explications les concernant se trouvent dans cet article pour éviter de les réécrire sur d'autres problèmes.
La réponse à ce problème est 6857.
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.
Les commentaires ne sont plus disponibles.