[VB.NET] Conjecture de Goldbach

Voir le sujet précédent Voir le sujet suivant Aller en bas

[VB.NET] Conjecture de Goldbach

Message par Skynyrd777 le Sam 26 Juin 2010 - 12:36

Bonjour,

La conjecture de Goldbach est un problème d'arithmétique. Il stipule que pour tout les entiers pairs strictement supérieurs à 2 il existe une écriture identique sous la forme d'une somme de nombres premiers. Tous les naturels pairs à partir de 4 peuvent être écris sous la forme d'une somme de nombres premiers. Un nombre premier peut servir plusieurs fois.

Algorithme en VB.NET
Code:
    Sub ConjectureFaible()

        ' 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
        If n < 100 Then
            If n = 2 Or n = 3 Or n = 5 Or n = 7 Or n = 11 Or n = 13 Or n = 17 Or n = 19 Or n = 23 Or n = 29 Or n = 31 Or n = 37 Or n = 41 Or n = 43 Or n = 47 Or n = 53 Or n = 59 Or n = 61 Or n = 67 Or n = 71 Or n = 73 Or n = 79 Or n = 83 Or n = 89 Or n = 97 Then Return True
        End If
        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

Notes : La fonction booléenne parite() renvoie vrai si le paramètre unique d'entrée est pair et faux s'il est impair. La fonction booléenne primalite() renvoie vrai si le paramètre unique d'entrée est un nombre premier et faux s'il ne l'est pas. Pour des raisons d'optimisation le paramètre d'entrée est premièrement comparé à une table des nombres premiers de 1 à 100 pour éviter d'utiliser le test de primalité dans de nombreux cas. La conjecture est vérifiée sous sa forme forte et faible. Cet algorithme utilise une programmation brute force.
avatar
Skynyrd777
Admin

Messages : 216
Date d'inscription : 02/06/2010

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum