Conjecture de syracuse

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 838 fois - Téléchargée 18 fois

Contenu du snippet

Dans la série des algorithmes qui ne servent à rien d'autres qu'à l'intérêt mathématique je présente la première implémentation en VB.NET sur ce site de l'algorithme permettant de vérifier la conjecture de Syracuse sur un entier naturel. (J'ai vu que des sources existaient déjà sur ce site mais elles n'étaient qu'en VB6).

Petites explications. Une suite de Syracuse part d'un nombre entier naturel (positif) n et s'il est pair alors le nombre suivant sera égal à n/2 si il est impair alors le nombre suivant sera 3n+1. La conjecture est le fait que toutes les suites de chaque n que nous avons pu vérifier tendait vers 1 (et vers un cycle trivial, effectivement arrivé à 1 la suite entame à répétition le cycle 4 2 1).

Source / Exemple :


Sub Main()
        Dim n As Decimal = Console.In.ReadLine()
        Dim s As Decimal = n
        Dim a As Decimal = 0
        Dim e As Decimal = 0
        While s <> 1
            e += 1
            If odd(s) Then
                s = 3 * s + 1
            Else
                s /= 2
            End If
            If s > a Then a = s
            Console.Out.WriteLine(s)
        End While
        Console.Out.WriteLine("-----")
        Console.Out.WriteLine("Altitude maximale : " & a)
        Console.Out.WriteLine("Durée de vol : " & e & " étapes")
        Console.Out.WriteLine("Facteur d'expansion : " & a / n)
        Console.In.ReadLine()
    End Sub

    Function odd(ByVal x As Decimal) as Boolean
        Return (x And 1) = 1
    End Function

Conclusion :


Cette implémentation fournit quelques informations comme le temps de vol (le nombre d'étapes), l'altitude maximale (la plus haute valeur prise par n) ou le facteur d'expansion (l'altitude maximale divisée par la valeur initiale e n).

Notons que la fonction odd(x) renvoie vrai ("True") si le nombre passé en paramètre (x) est impair 'il utilise l'évaluateur de conditions de VB.NET). De plus j'ai utilisé le type Decimal pour permettre de tester des valeur comme 100759293214567 à n, ce que le type UInteger ne permettait pas.

Merci de votre attention.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
38
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
30 juin 2010

Merci Philbar71, je crois qu'en me parlant de la conjecture de Goldbach vous venez de sacrifier mon dernier espoir de finir mon devoir de français...

http://www.vbfrance.com/codes/CONJECTURE-GOLDBACH_50675.aspx

Je viens de publier cet algorithme pour tester la conjecture de Goldbach sur un entier naturel pair et je crois que je vais passer plusieurs soirées entières sur cette conjecture ^^ Mais, je ne vise pas le million ne t'inquiète pas !
Messages postés
70
Date d'inscription
samedi 1 juin 2002
Statut
Membre
Dernière intervention
5 juillet 2013

Pas mal en effet.
Reste à te pencher sur la Conjecture de Goldbach.
Apostolos Doxiadis en a fait un roman passionnant : "Oncle Petros et la conjecture de Goldbach".
A noter que l'éditeur de ce livre offre un million de dollars à toute personne qui résoudra cette conjecture.

Si ça te tente tu risques de passer quelques nuits blanches...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.