Page 1 of 1

Le défi de Syracuse

Unread postPosted: 11 Feb 2020, 09:27
by kinkazma
Dans la conjecture de Syracuse, je vous mets au défi de trouver un nombre dont le temps de vol est supérieur à 400 ! Celui qui trouve en premier prend la première place, cependant si quelqu’un trouve un temps de vol plus long que le précédent : il vole sa place.

Voici le programme pour calculatrice :
archives_voir.php?id=2585235
-> Collatz est la version expéditive,
-> Syracuse est une version plus lente, plutôt pour ordinateur.

La conjecture de Syracuse utilise l’algorithme suivant : Si n est pair, on le divise par 2, sinon on le multiplie par 3 et on ajoute 1.
On recommence jusqu’à obtenir 1.
– Le temps de vol, c’est le temps nécessaire avant d’arriver à 1.

Dans le programme il suffit de rentrer le nombre que l’on souhaite vérifier et le programme nous donne le temps de vol, entre autres.
Cela dit, il permet aussi de s’en remettre au hasard pour essayer de gagner !

Re: Le défi de Syracuse

Unread postPosted: 15 Feb 2020, 14:30
by chadok
Un certain nombre inférieur à 1.000.000 a un temps de vol de 524 ;)
Bon, j'avoue, j' ai un peu triché, mais il n' en reste pas moins vrai que ce problème est assez fascinant, et excite les neurones des mathématiciens depuis presque un siècle...

Re: Le défi de Syracuse

Unread postPosted: 15 Feb 2020, 19:40
by chadok
Comme extension à ce sujet, il pourrait être intéressant de comparer les performances des différentes calculatrices en terme de vitesse ? :) Critor a déjà livré quelques programmes lors de ses tests annuels, mais cette conjecture de Syracuse est ludique, et parfaite en ce qui concerne la manipulation d'entiers.
On pourrait déjà afficher les temps de vol records pour les entiers de 2 à 100000. Pour ceux qui veulent s'amuser, ci-dessous mon code Python, testé sur mon PC et sur mon smartphone (désolé, je n' ai pas de calculatrice récente, je n' ai que du vintage :) )
A vos chronomètres ! :)

Code: Select all
def syr(n):
        temps=0
        while n > 1:
                if n % 2 == 0 :
                        n=n/2
                else :
                        n=3*n+1
                temps=temps+1
        return temps
     
recordvol=0
for x in range(2,100000+1):
        syr(x)
        if syr(x)>recordvol :
                print(x,", temps de vol :", syr(x))
                recordvol = syr(x)

Re: Le défi de Syracuse

Unread postPosted: 15 Feb 2020, 20:57
by Dogm
chadok wrote:Comme extension à ce sujet, il pourrait être intéressant de comparer les performances des différentes calculatrices en terme de vitesse ? :) Critor a déjà livré quelques programmes lors de ses tests annuels, mais cette conjecture de Syracuse est ludique, et parfaite en ce qui concerne la manipulation d'entiers.
On pourrait déjà afficher les temps de vol records pour les entiers de 2 à 100000. Pour ceux qui veulent s'amuser, ci-dessous mon code Python, testé sur mon PC et sur mon smartphone (désolé, je n' ai pas de calculatrice récente, je n' ai que du vintage :) )
A vos chronomètres ! :)

Code: Select all
def syr(n):
        temps=0
        while n > 1:
                if n % 2 == 0 :
                        n=n/2
                else :
                        n=3*n+1
                temps=temps+1
        return temps
     
recordvol=0
for x in range(2,100000+1):
        syr(x)
        if syr(x)>recordvol :
                print(x,", temps de vol :", syr(x))
                recordvol = syr(x)


Pour calculer les temps de vol de 2 jusqu'à 77031, ma NumWorks a mis plus de 12 minutes 33 secondes :) mais elle s'est arrêtée là. :thinking:
Est ce normal ?

Re: Le défi de Syracuse

Unread postPosted: 15 Feb 2020, 21:03
by chadok
Oui, c' est normal :) Le nombre suivant 77031 se situe au-delà de 100000 : c' est 106239, avec un temps de vol de 353.
Donc 12 min 33 s, record à battre :#top#:
PS : c' est bien le temps pour couvrir le range de 2 à 100000 ? Tu n' as pas interrompu le test à 77031 ?