Le 14e problème du projet Euler
Bonjour,
Ce problème a pour thème la suite de Syracuse ...
https://projecteuler.net/
Il faut trouver l'entier inférieur à 10 puissance 12 (!) qui a la plus grande durée de vol...
Je débute en Python (et en n'importe quel langage d'ailleurs...) et j'ai écrit un script simple qui devrait résoudre le problème...sauf que d'après mes estimations mon programme devrait tourner environ 1 an avant de donner la réponse !
Je n'ai aucune idée de ce qu'il faut faire pour aller plus vite....
Pouvez vous me suggérer des pistes ?
Merci d'avance....
Ps dans le code ci-dessous je limite la recherche à 10 puissance 6 et mon programme met environ 30 s pour répondre.
[837799, 525, 2974984576]
30.2937331199646
837799 est le nombre cherché, la suite comprend 525 termes et "monte" jusqu'à 2974984576 (ceci n'est pas demandé dans le projet Euler...)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| from time import time
debut=time()
def compte_syracuse(n) :
a=1
nb=n
altitude=nb
trio=[]
while nb != 1 :
if nb%2 == 0 :
nb=nb//2
else :
nb=3*nb+1
a=a+1
if altitude<nb :
altitude=nb
trio=[n,a,altitude]
return trio
resultat=[1,1,1]
for i in range(2,1000000):
provisoire=compte_syracuse(i)
if provisoire[1]>resultat[1] :
resultat=provisoire
print(resultat)
fin= time()
print(fin -debut) |