ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Conjecture de Goldbach pour les nombres impairs, nombres de Stern     

Goldbach conjectura en 1753 que :

Tout entier impair (non premier) peut s'écrire p + 2k2, somme d'un nombre premier et du double d'un carré

Moritz Stern invalida cette assertion un siècle plus tard en apportant deux contre-exemples : 5777 = 53 × 109 et 5993 = 13 × 461. Depuis cette époque, on appelle nombre premier de Stern tout nombre premier qui n'est pas de la forme p + 2k2.

On  se propose ici de rechercher la décomposition de Goldbach pour un nombre impair donné, premier ou non, au moyen d'un petit programme en JavaScript.

Un entier n étant donné, il s'agit donc de trouver un entier k et un nombre premier p tel que n = p + 2k2. L'algorithme se base sur la stricte positivité du nombre p = n - 2k2 qui doit s'avérer premier, donc au moins égal à 2. Par suite, 1 k2 ≤ n/2 - 1 :

    Le programme contrôle l'imparité du nombre entré mais pas les données fantaisistes... Concernant la routine prem(), on trouvera des explications complémentaires sur la page de recherche des nombres premiers.

Programmation de l'algorithme en JavaScript :

<SCRIPT LANGUAGE=JavaScript>
var p,t
function stern()
{
n$=25; t=0; ok=0;
n$=prompt("Entrez un nombre impair > 1 : ",n$)
if (n$=
=null || isNaN(n$)) {return} else {n=eval(n$)}
// null = bouton annuler, isNaN = n'est pas un nombre
if (n%2= =0){alert(n+" n'est pas un nombre impair"); return}
t=prem(n); if(t=
=1){alert(n+" est un nombre premier."); t=0}
k = 1;
while (k*k<=n/2-1)
 // tant que p = n - 2k²  peut s'avérer premier
{
p=n-2*k*k;
if(p=
=2 || p= =3 || p= =5 || p= =7){t=1} else {t=prem(p)}
// prem() retourne 1 si p premier, 0 sinon
if (t=
=1){if (!confirm(n+" = "+p + " + 2 x "+k+"²")) return; ok=1}
k++;
}
if(ok=
=0){alert(n+" n'admet pas la décomposition cherchée.")}
}

function prem(p)    
// recherche si p impair > 7 est premier
{
d=1 ; a=0 ; rst = 1; rst2=1; t=0
if (p%3 != 0 && p%2 !=0)   
// a%b est le reste de la division de a par b
{
while (d*d<=p && rst*rst2 >0)
{
a++
d=6*a-1 ; rst = p % d
d = d+2 ; rst2 = p % d
}
if(rst=
=0 || rst2= =0) {t=0} else {t=1}
}
return t
}

</SCRIPT>
 


Le programme ci-dessous recherche tous les nombres impairs non décomposables dans un intervalle [nd , nf] fourni par l'utilisateur. On a simplement introduit une boucle for(n = nd ; n <= nf ; n = n+2). Dans l'intervalle [3,6000], le programme fournit quasi instantanément les réponses attendues : 3 , 17 , 137 , 227 , 977 , 1187 , 1493 , 5777 , 5993 en signalant le cas des nombres premiers non décomposables, à savoir les 7 premières réponses, nombres premiers de Stern qui, outre 2, sont les seuls aujourd'hui connus.

 !   Des bornes "très grandes" peuvent bloquer votre système ou dépasser la capacité de calcul en nombres entiers de votre Mac ou PC. On sait qu'il n'y a pas de réponse à partir de 5993 jusqu'à plus de 1 000 000 000... Chrome vous avertit après un certain temps de travail pour vous demander si vous voulez continuer... Au pire, pas de panique. Sur PC : Alt + Ctrl + Suppr (gestionnaire de taches), puis sélectionnez votre navigateur dans la liste d'applications en cours et cliquez Fin de tache.


function stern2()
{
n$="";tp=0;tn=0;co=0
n$=prompt("Entrez la borne inférieure : ",n$)
if (n$==null || isNaN(n$)) {return} else {nd=eval(n$)}
if(nd<3){nd=3}
if (nd%2==0){nd=nd+1}

n$="";n$=prompt("Entrez la borne supérieure : ",n$)
if (n$==null || isNaN(n$)) {return} else {nf=eval(n$)}
if (nf%2==0){nf=nf-1}

for(n=nd;n<=nf;n=n+2)
{
tn=prem(n);p$=" est premier et "; if(tn==0){p$=" "}
k = 1;
while (k*k<=n/2-1)
{
p=n-2*k*k;
if(p==2 || p==3 || p==5 || p==7){tp=1;tn=1} else {tp=prem(p)}
if (tp==1){break}
k++;
} // fin while
if(tp==0){co++;if (!confirm(n+p$+"n'admet pas la décomposition cherchée."))return}
tp=0;
} // fin boucle for
alert ("Fin de recherche : "+co+" contre-exemple(s) trouvé(s)")
} // fin stern2

 




© Serge Mehl - www.chronomath.com