Objectif : On souhaite écrire un programme Javapour vérifier la conjecture de GoldBach (1742) soit : "Tout nombre pair est décomposable en la somme de deux nombres premiers".
Spécifications de l’algorithme :
En deux étapes :1. On entre un nombre pair n au clavier, puis on génère tous les couples (a,b) tels que a + b = n, en faisant varier a de 1 à n/2. Si l'on rencontre un couple tel que a et b soient simultanément premiers la conjecture est vérifiée.
2. On peut alors, au choix soit arrêter le programme, soit continuer la recherche sur un autre nombre pair.
Exemple :
Pour n = 10, on génère les couples :
(1,9), (2,8), (3,7), (5,5)
on constate que la conjecture est vérifiée, et on écrit :
10 = 3 + 7
10 = 5 + 5
Implantation en Java
On écrira la méthode booléenne EstPremier pour déterminer si un nombre est premier, et la méthode generCouples qui génère les couples répondant à la conjecture.
Proposition de squelette de classe Java à implanter :
class ApplicationGoldBach {
static void main(String[ ] args) {
……..
}
static boolean EstPremier(int m) {
……..
}
static void generCouples(int n) {
……..
}
}
Une classe Java solution du problème :
import Readln; // classe contenant des méthodse permettant de lire à partir du clavier class ApplicationGoldBach {
static void main(String[ ] args) {
int n;
while ( (n=Readln.unint( )) !=0 ){
generCouples(n); }
}
static boolean EstPremier(int m) {
int k ;
for (k = 2 ; k <= m / 2 ; k++) {
if (m % k == 0) {
return false;
}
}
return true;
}
static void generCouples(int n) {
if (n % 2 ==0) {
for (int a = 1; a <= n/2; a++) {
int b;
b = n - a;
if ( EstPremier(a) && EstPremier(b) ) {
System.out.println(n+" = "+a+" + "+b);
}
}
}
else System.out.println("Votre nombre n'est pas pair !");
}}
Image en diagrammes structurés JGrasp-Like du programme
![]()
informations sur les diagrammes