[VB.NET] Conjecture de Goldbach
Republic of Computing - Forum :: Programmation :: Programmation algorithmique :: Banque d'algorithmes
Page 1 sur 1
[VB.NET] Conjecture de Goldbach
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
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.
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.
Skynyrd777- Admin
- Messages : 216
Date d'inscription : 02/06/2010
Republic of Computing - Forum :: Programmation :: Programmation algorithmique :: Banque d'algorithmes
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum