![]() ![]() |
» Liens analogiques : nombres de Fermat , nombres de Mersenne , nombres de Carmichael , nombres puissants et nombres de Wieferich
Selon le petit théorème de Fermat, on sait que si p est un entier premier, alors pour tout entier naturel a, ap a même reste que a dans la division par p. En d'autres termes :
Autrement dit : ap - a est divisible par p. Ainsi :
s'il existe a entier tel que ap ≡ a [p], alors p est composé (c.à.d. non premier)
! Le petit théorème de Fermat peut servir de test de primarité (certains disent de nos jours primalité, le franglais ça fait tendance...), mais ce n'est pas un critère. Il n'est qu'une condition nécessaire pour tout candidat au statut de nombre premier.
En effet : 341 = 11 × 31. Or 211 = 2048 ≡ 2 [341] puisque 2048 = 6 × 341 + 2
Ainsi :
Or :
On dit que 341 est un entier naturel pseudo-premier de base 2. Les chinois de l'antiquité se sont intéressés à ces nombres, raison pour laquelle on les appelle parfois nombres chinois. Ils furent étudiés au 20è siècle par Paul Poulet et Robert D. Carmichael.
➔ D'une façon générale, on appelle nombre pseudo-premier de base a, tout entier composé p tel que ap ≡ a [p]. Le statut de ces nombres n'est pas bien défini : certains mathématiciens y incluent les nombres premiers. D'autres exigent qu'ils soient impairs. D'autres ajoutent la condition pgcd(a,p) = 1, c'est à dire a et p premiers entre eux, dans la relation ap ≡ a [p]. Sous cette dernière condition on obtiendrait :
On note que les nombres 561, 1105, 1729, marqués en rouge, sont pseudo-premiers pour les bases 2, 3 et 4. On est alors amené à considérer une condition plus forte mais encore insuffisante, à savoir les entiers naturels p vérifiant, pour toute base a < p, la relation ap ≡ a [p] :
➔ Pour en savoir plus :
Programme pseudo-premiers en JavaScript |
La recherche d'un nombre pseudo-premier est difficile et fastidieuse sans le recours à l'ordinateur et l'absence d'une telle machine à la disposition des grands mathématiciens qui se sont penchés sur les problèmes d'arithmétique depuis la nuit des temps, inspire le plus grand respect.
Le programme ci-dessous vous demandera la base a (entrer 2 pour un nombre de Poulet) et recherchera les nombres pseudo-premiers p impairs et composés (non premiers) de base a inférieurs à 10000. On commence à p = 9 car, en deçà, p serait soit pair, soit premier. La condition pgcd(a,p) = 1 est intégrée. On pourra la retirer en modifiant le test :
- if (t= =0 && d= =1) : si p est non premier et pgcd(a,p)=1
par simplement :
- if (t= =0) : si p est non premier
➔ La fonction prem() est identique à celle étudiée dans la recherche de primarité d'un nombre donné. La fonction pgcd() est identique à celle étudiée dans la recherche du pgcd par l'algorithme d'Euclide.
! Attention au temps de calcul pour n > 10000. Le programme recherche les nombres pseudo-premiers impairs à partir de n = 9.
<SCRIPT
LANGUAGE=JavaScript> var t d=0;t=0; function pseudo() { a$=2 a$=prompt("Donnez la base : ",a$) if (a$==null || isNaN(a$)) {return} else {a=eval(a$)}if (a< 2 || a != Math.floor(a)) {return} for (n=9;n<=10000;n=n+2) { t=prem();d=pgcd(n,a) if (t==0 && d==1) { r1=a%n;rn=r1 for (i=2;i<=n;i++) {rn=(rn*r1)%n} if (rn%n==r1) {if (!confirm(n+" est pseudo-premier de base "+a)) return}} } alert("terminé !") } function pgcd() function prem()
|