Conjecture de goldbach

Contenu du snippet

Voici un nouvel algorithme de mathématique. Il permet de tester les conjectures (faible et forte) de Goldbach d'un entier naturel. Cette conjecture (forte) qui dit que tout entier naturel pair est égal à la somme de deux nombres premiers (des nombres divisibles que par eux même et un) et cette conjecture faible qui dit que tout entier naturel impair et strictement supérieur à 7 est égal à la somme de trois nombres premiers.

Notons la présence de deux tests sous forme de fonctions qui renvoient respectivement si un nombre est pair (parite(n)) ou s'il est premier (primalite(n)). On peut utiliser la fonction de parité pour prouver qu'un nombre est impair (imparité ?) en testant parite(n+1).

Source / Exemple :

Sub Main()

        ' Conjecture faible de Goldbach

        Dim n As UInteger = 1
        Do Until parite(n + 1) And n > 7
            n = Console.In.ReadLine
        Loop

        For i As UInteger = 2 To n - 2
            If primalite(i) And parite(i + 1) Then
                For j As UInteger = 2 To n - i - 2
                    If primalite(j) And parite(j + 1) And primalite(n - i - j) And parite(n - i - j + 1) Then
                        Console.Out.WriteLine(i.ToString & "+" & j.ToString & "+" & (n - i - j).ToString & "=" & n.ToString)
                    End If
                Next j
            End If
        Next i

        Console.In.ReadLine()
    End Sub

    Sub ConjectureForte()

        ' Conjecture forte de Goldbach

        Dim n As UInteger = 1
        Do Until parite(n)
            n = Console.In.ReadLine
        Loop

        For i As UInteger = 2 To n - 2
            If primalite(i) And primalite(n - i) Then
                Console.Out.WriteLine(i.ToString & "+" & (n - i).ToString & "=" & n.ToString)
            End If
        Next i

        Console.In.ReadLine()
    End Sub

    Function primalite(ByVal n As UInteger) As Boolean
        For i As UInteger = 2 To Math.Sqrt(n)
            If n / i = Int(n / i) Then Return False
        Next i
        Return True
    End Function

    Function parite(ByVal n As UInteger) As Boolean
        Return Not (n And 1) = 1
    End Function

Conclusion :

Une fois de plus je publie une très petite source, et ce car les algorithmes peuvent être intéressants et parce qu'ils peuvent permettre à quelqu'un qui ne la connaissait pas de s'intéresser à cette conjecture. Je vous avoue que je suis très friand de sources algorithmiques sur ce site !

Je ne suis pas sûr que cet algorithme le plus performant mais il a l'avantage de donner (il me semble) toutes les combinaisons possibles de sommes et d'éviter les doublons (7+7=14 et 7+7=14). Si vous voyez des améliorations n'hésitez pas, on est là pour ça !

Merci de votre attention ! Skanenruf.
PS. Les tests de parité et de primalité peuvent servir à d'autres algorithmes.

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.