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 python : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Partager