Conjecture de syracuse

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.

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.