Nov 21, 2024

Wiki

Python

Aide

edit SideBar

Search

Les Nombres Premiers


Les nombres premiers

Définition, premières propriétés

Définition des nombres premiers

Ce sont les nombres qui admettent exactement deux diviseurs distincts (1 n'est donc pas premier).

Les cent premiers nombres premiers : 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97.

Intérêts portés à ces nombres

Tout nombre entier se décompose de manière unique (à permutation et multiplication par +/-1 près) en produit de nombre premiers (démontré par Gauss en 1799) : ils correspondent approximativement au tableau de Mendeleïev des nombres.

Leur utilisation récente en cryptographie (cryptage RSA) les a placé sur le devant de la scène : les maîtriser devient un enjeu stratégique majeur.

Le plus grand nombre premier connu

Le plus grand nombre premier connu est un nombre premier de Mersenne. Il vaut $2^{32582657}-1$

Les algorithmes probabilistes de test de la primalité identifient des nombres premiers de 100000 chiffres en quelques fractions de secondes.

Le crible d'Eratosthène

Il permet d'obtenir la liste des nombres premiers inférieurs à N :

  1. On écrit tous les entiers de 2 à N.
  2. Ensuite, on prend 2, et on enlève tous ses multiples.
  3. Puis, on prend le prochain sur la liste (à savoir 3), et on enlève tous ses multiples, puis on prend le prochain (5), et on enlève...
  4. Il suffit d'aller jusqu'à la racine carrée de N : on peut prendre alors tous les nombres qui restent sur la liste, ils seront tous premiers.

Théorèmes et conjectures

Quelques résultats connus

Voici une petite liste de résultats connus, certains depuis longtemps, autour des nombres premiers...

  • Les nombres premiers sont infinis.
En effet, si on en avait n : $p_1, p_2, ..., p_n$, alors $p_1 \times p_2 \times ...\times p_n + 1$ n'est pas dans cette liste, et n'est divisible par aucun de nos nombres premiers, donc...
  • Il y a des "trous" aussi grand que l'on veut : par exemple, dans 1000!+2, 1000!+3, 1000!+4, ..., 1000!+1000, il n'y a pas un seul nombre premier.
  • Il existe toujours un nombre premier entre un entier et son double.
  • Un des théorèmes nombreux de Fermat : si un nombre premier a un reste égal à un dans une division par 4, alors ce nombre premier est la somme de deux carrés d'entiers :

$p\equiv 1[4] \Rightarrow \exists (m,n) \in \mathbb{N}^2, p = m^2+n^2$

  • On peut trouver des progressions arithmétiques de n'importe quelle longueur : 199, 409, 619, 829, 1039, 1249, 1459, 1669, 1879, 2089. Ce résultat vient d'être démontré par Terence Tao (médaille Fields 2006) et Ben Green.

Quelques conjectures

Les résultats suivants restent à démontrer...

  • Conjecture de Goldbach : Tout entier pair est la somme d'au plus deux nombres premiers (ou, de manière équivalente, tout entier est la somme d'au plus trois nombres premiers).
  • Il existe une infinité de nombres premiers jumeaux (comme 3-5, 5-7, 11-13, 17-19, etc.)
  • Étant donné un nombre premier, existe-t-il une formule donnant le nombre premier qui le suit ?
Réponse inconnue.
  • Existe-t-il une infinité de nombres premiers de la forme un carré parfait+1, comme $5=2^2+1, 17=4^2+1,... ?
Réponse : Idem.

Travaux pratiques

  1. Mettre en oeuvre le crible d'Eratosthène.
  2. Rechercher, dans la liste obtenue, les nombres premiers jumeaux.
  3. Dans l'affichage de la liste des nombres premiers, mettez en couleurs les nombres premiers faisant partie d'une progression arithmétique d'au moins trois termes (une couleur par progression).
  4. Vérifier le théorème de Fermat et la conjecture de Goldbach sur un grand nombre d'entiers.
  5. Il existe un crible amélioré, dit crible d'Atkin...implémentez-le!

Des outils d'arithmétique

Le plus grand commun diviseur (PGCD)

Définition

Le plus grand commun diviseur (aka PGCD) de $a$ et $b$ est le plus grand élément de l'ensemble des diviseurs communs à $a$ et $b$. C'est un entier positif.

Algorithme d'obtention

  1. Le PGCD de $a$ et $0$ est $a$.
  2. Pour $b$ non nul, le PGCD de $a$ et $b$ est celui de $b$ et de $a%b$.

Le plus petit commun multiple (PPCM)

Définition

Le plus petit commun multiple (aka PPCM) de $a$ et $b$ est le plus petit élément de l'ensemble des multiples communs à $a$ et $b$. C'est un entier positif.

Algorithme

Pour le PPCM de deux nombres, on peut utiliser le fait que $PPCM(a,b) = \frac{ab}{PGCD(a,b)}$.

Pour obtenir le PPCM des nombres compris entre 2 et un maximum donné, on procède comme dans le crible d'Eratosthène, en intercalant, pour chaque puissance d'un nombre premier, un facteur $p$ à la place de $p^n$.

Par exemple, le PPCM des entiers depuis 2 jusqu'à 10 est égal au produit des nombres 2,3,2,5,7,2,3, parce que 2,3,5 et 7 sont des nombres premiers, et que 4 et 8 sont remplacés par 2, et 9 par 3.

Puissance d'un entier

Rappels

Rappelons que pour effectuer le calcul d'une puissance entière d'un nombre, il faut éviter de calculer $x^{100}$ en multipliant $x$ 99 fois par lui-même.

Par exemple, pour calculer $x^{100}$, on calculera $x^{64} \times x^{32} \times x^4$, soit 6 multiplications pour $x^{62}$, puis 2 multiplications pour terminer, donc au final 8 multiplications.

Pour décomposer le calcul comme cela a été fait précédemment, il faut utiliser la représentation binaire de l'exposant. Ainsi, $100_{10} = 1100100_2$, soit... $100 = 1 \times 2^6 + 1 \times 2^5 + 0 \times 2^4 + 0 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 0 \times 2^0 = 64 + 32 + 4.$

Cas des grandes puissances modulo $n$

Si $n$ est représentable en machine, alors, aussi grand que soit l'exposant $p$, $a^p %n$ est représentable en machine.

Dans le calcul concret de cette puissance, il est cependant nécessaire d'utiliser temporairement des nombres supérieurs à $n$, avant de les réduire modulo $n$.

Cependant, comme il est primordial pour l'efficacité d'éviter l'apparition de très grands nombres entiers, au lieu de calculer par exemple $x^{100}$ puis réduire le résultat modulo $n$, la réduction modulo $n$ se fait après chaque multiplication.

Travaux pratiques

  1. Faire une fonction qui calcule le PGCD de deux entiers.
  2. Déterminez le PPCM des nombres compris entre $2$ et $N$.
  3. Calculez efficacement la puissance d'un nombre.

Des tests de primalité

L'enfance de l'art

Première méthode

Pour trouver les facteurs d'un entier n, on divise ce nombre, successivement, par tous les entiers inférieurs à $n$.

On pourrait se limiter à rechercher les restes des divisions de n par les nombres premiers inférieurs à $\sqrt{n}$, mais ce raffinement de la méthode impose l'utilisation d'une table des nombres premiers (générée par le crible d'Eratosthène, par exemple.)

Souvent, en l'absence de cette table, on opte pour un compromis : on teste la divisibilité par 2, puis par les nombres impairs seulement, ce qui fait $\approx \frac{\sqrt{n}}{2}$ divisions.

Travaux pratiques

  1. Réalisez ce tout premier test de primalité.
  2. Améliorez ce test en ne considérant que les nombres impairs et 2.
  3. Comparez les efficacités avec les programmes à venir.

Le théorème de Wilson

Une méthode alternative pour savoir si un nombre est premier, est d'utiliser le théorème de Wilson :

$n \textrm{ est premier } \Longleftrightarrow n \textrm{ divise } (n-1)!+1.$

Ainsi, par exemple, 10!+1=3628801 est divisible par 11 (la somme alternée des chiffres l'est), donc 11 est premier.

Hélas, cette méthode nécessite n multiplications (plus d'opérations que la précédente.)

Le test chinois

Le test

Les tests de primalité modernes se fondent sur un résultat analogue, découvert dans la Chine antique:

$\textrm{Si n est premier, alors n divise } 2^n-2.$

Ainsi, chercher à savoir si 107 est premier revient à chercher s'il divise $2^{107}-2$. Or, il existe des méthodes d'exponentiation rapide qui permettent d'obtenir $2^{107}$ en moins d'une dizaine de multiplications.

Plus généralement, on sait calculer $2^n$ en moins de 3,4N multiplications, où N est le nombre de chiffres de n.

De plus, on ne souhaite pas calculer $2^n-2$, mais son modulo n. On a ainsi une méthode rapide, et qui n'encombre pas la mémoire.

Critique du test

Du fait de la non équivalence du résultat précédent, il existe des nombres qui divisent $2^n-2$, et qui ne sont pas premier. On les appelle nombre pseudo-premiers de base 2. Heureusement, ils sont rares.

341=11*31

La plupart de ces exceptions peuvent être traitées par une généralisation du test Chinois : le petit théorème de Fermat (à ne pas confondre avec le dernier théorème de Fermat, récemment devenu une star.)

Travaux pratiques

  1. Réalisez un test de primalité basé sur le théorème Chinois.
  2. Idem avec le test de Wilson.
  3. Les comparer entre eux, et au précédent test.

Le petit théorème de Fermat

Petit théorème de Fermat...

Si $n$ est premier, alors $n$ divise $a^n-a, a>1$

En d'autres termes, $a^n \equiv a [n].$

Attach:PetitFermat.jpg Δ

L'application aux tests de primalité

Au lieu de tester uniquement si $n$ divise $2^n-2$, on peut regarder aussi si $n$ divise $3^n-3$, $5^n-5$, $7^n-7$, etc.

On peut alors, encore, trouver des exceptions (des nombres pseudo-premiers en base a), voire même des nombres pseudo-premiers dans plusieurs bases.

Exemples

  • 2701=37*73 est pseudo-premier en base 2 et 3.
  • 3215031751 est l'unique nombre pseudo-premier en base 2,3,5 et 7 qui soit inférieur à vingt-cinq milliard. Il n'est pas pseudo-premier en base 11 (edit : ces affirmations sont à vérifier).

Les nombres de Carmichaël

Par malchance, chaque base a une infinité de pseudo-premiers. Pire, il existe des nombres, dits de Carmichaël, qui sont pseudo-premiers dans toutes les bases n'ayant pas de facteur commun avec le nombre lui-même.

Par exemple, 561, 1105, 1729, 2465, 2821,...

En 1912, Robert Carmichaël découvrit 15 nombres de ce type, et il conjectura leur infinité...ce qui fut démontré en 1992 : il existe au moins $n^\frac{2}{7}$ nombres de Carmichaël inférieurs à $n$.

Travaux pratiques

Le sujet

  1. Améliorez votre programme précédent pour qu'il ne regarde pas uniquement $2^n-2$, mais aussi $3^n-3$, $5^n-5$, $7^n-7$.
  2. Vérifiez que les nombres de Carmichael donnés en exemple sur la page de présentation, sont bien des nombres pseudo-premiers en base 2, 3, 5 et 7 (on vérifiera leur primalité par une méthode naïve.)
  3. Cherchez un compromis entre nombre de bases testées et rapidité d'exécution.
  4. Regarder combien de nombres pseudo premiers en base 2 (inférieurs à une valeur saisie par l'utilisateur) ne sont pas premiers, pour estimer la fiabilité du procédé. Combien de bases faut-il prendre pour être quasi-assuré de la primalité du nombre pseudo-premier ?
  5. Petite application : demandez à l'utilisateur de saisir un entier, et renvoyez un nombre premier entre cet entier et son double (il existe toujours).

Pour aller (un peu) plus loin

Si le sujet vous intéresse, et si vous voulez creuser un peu plus, vous pouvez :

  • Utiliser une implémentation du crible d'Eratosthène pour le test naïf (au lieu de regarder tous les nombres impairs, on peut s'intéresser uniquement aux premiers). Comparez les résultats obtenus avec les autres algorithmes.
  • Réaliser un test de primalité basé sur le théorème de Wilson. Le comparer aux précédents tests.
  • Réaliser votre propre élévation à la puissance nième.
  • Relier les nombres pseudo-premiers à la cryptographie RSA.

Répartition des nombres premiers

Théorème de raréfaction des nombres premiers

On le doit à Jacques Hadamard et Jean de la Vallée Poussin. Il nous enseigne que le nombre de nombres premiers inférieur ou égal à n est approximativement $n ln(n)$.

Ainsi, si on place tous les nombres dans un gigantesque tableau, puis si l'on noircit tous les nombres premiers, les cases noircies seront de plus en plus rares vers le bas du tableau.

La spirale d'Ulam

Un jour, le mathématicien Ulam s'ennuyait dans une conférence. Il eut l'idée d'écrire les entiers suivant une spirale :

765 
814 
92314
10111213

puis de noircir les nombres premiers. Il remarqua alors que les cases noires s'alignaient étonnamment...

Attach:Ulam.jpg Δ

Travaux pratiques

  1. Représentez graphiquement les nombres premiers : chaque pixel représente un nombre, et on l'allume si le nombre associé est premier. Il doit y avoir de moins en moins de pixels d'allumés, vu que les nombres premiers se raréfient.
  2. Représentez la spirale d'Ulam.

Formules donnant les nombres premiers

Des formules polynomiales ?

Aucune fonction polynôme P(n) ne donne que des nombres premiers, sauf dans le cas trivial où ledit polynome est constant, égal à un nombre premier.

La formule de Mills

En 1947, W. Mills étonne la communauté mathématique en établissant l'existance d'une constante A qui, insérée dans la formule $\left[ A^{3^n} \right]$ donne un nombre premier, quelle que soit la valeur de l'entier n choisi.

L'utilité de cette formule est cependant illusoire : on ne peut calculer A (la constante de Mills) qu'à la condition de connaître déjà tous les nombres premiers.

Une deuxième formule

$p_n = \left[ L.10^{n^2} \right] - \left[ L.10^{(n-1)^2} \right]*10^{2n-1}$ donne le $n$ième nombre premier...pourvu qu'on les connaissent déjà tous, car ici :

$L=0,2003000050000007000000011...$

(le n-ième nombre premier est placé en position $n^2$).

La formule de Minac et Willans

Les mathématiciens Minac et Willans ont imaginé une formule qui donne tous les nombres premiers dans l'ordre et sans répétition :

$p_n = \sum_{m=1}^{2^n} \left[ \left[ \frac{n}{1+ \sum_{j=1}^m \left[ \frac{(j-1)!+1}{j}-\frac{(j-1)!}{j} \right] }\right]^{\frac{1}{n}} \right]$

On ignorait qu'une telle formule puisse exister avant sa publication en 1995 (on était même pas loin d'être persuadé du contraire).

Cependant, la mise en œuvre d'une telle formule est si couteuse, qu'elle en est définitivement inexploitable.

Fermat et Mersenne

Les nombres de Fermat

Définition des nombres de Fermat

Définition : Le pième nombre de Fermat est $F_p = 2^{2^p}+1$.

Seuls les $F_p$ qui sont premiers nous intéressent :

  • $F_0=2^{2^0}+1=3$
  • $F_1=2^{2^1}+1=5$
  • $F_2=2^{2^2}+1=17$
  • $F_3=2^{2^3}+1=257$
  • $F_4=2^{2^4}+1=65537$.

Ces nombres sont à rapprocher des nombres de Mersenne, avec qui Pierre de Fermat correspondait.

Une des rares erreurs de Fermat

Pierre de Fermat pensait que tous ces nombres $F_n$ étaient premiers. Or $F_5 = 2^{2^5}+1$ , qui a dix chiffres, est divisible par 641.

Depuis, on n'a pas trouvé d'autres nombres de Fermat premiers, et on pense que seuls $F_0, F_1, F_2, F_3$ et $F_4$ le sont.

Nombres de Fermat et polygones réguliers

Gauss montra, dans Disquisitiones Arithmeticae, que si le $n$ième nombre de Fermat $F_n$ est premier, alors on peut construire à la règle et au compas le polygône régulier à n côtés.

Travaux pratiques

On demande de programmer un algorithme permettant de générer la liste des nombres de Fermat, et de déterminer lesquels sont premiers.

Si le sujet vous intéresse, vous pouvez vous renseigner sur les polygônes constructibles à la règle et au compas.

Les nombres de Mersenne

Définition des nombres de Mersenne

Définition : Le $p$ième nombre de Mersenne est $M_p = 2^p-1$.

Seuls les $M_p$ qui sont premiers nous intéressent :

  • $M_2=2^2-1=3$,
  • $M_3=2^3-1=7$,
  • $M_5=2^5-1=31$,
  • $M_7=2^7-1=127$,
  • $M_{13}=2^{13}-1=8191$,
  • etc.

On en connaît un peu plus d'une quarantaine, le dernier étant le plus grand des nombres premiers connus : $2^{32582657}-1$

Intérêts portés à ces nombres

On les connaît depuis l'antiquité. Historiquement, on s'intéressa aux nombres premiers de Mersenne du fait de leur lien avec les nombres parfaits.

Maintenant, ils sont utilisés pour obtenir des records (plus grand nombre premier connu). Un projet (GIMPS, Great Internet Mersenne Prime Search) se consacre d'ailleurs uniquement à cette tâche.

Condition nécessaire à ce que $M_p$ soit premier

Théorème : Pour que $M_p$ soit premier, il faut que $p$ le soit.

Cette condition n'est cependant pas suffisante : $2^{11}-1 = 23 \times 89$

Nombres de Mersenne et base 2

$M_p$ s'écrit $1111...111$ ($p$ fois) en base 2.

Comme il faut que $p$ soit premier pour que $M_p$ le soit, on en déduit, on en déduit que les nombres premiers de Mersenne s'écrivent, en base 2, sous la forme d'un nombre premier de uns :

  • $M_2 = 11$
  • $M_3 = 111$
  • $M_5= 11111$

Un résultat dû à Lucas

Edouard Lucas, en 1878, a remarqué que $M_p \textrm{ est premier} \Longleftrightarrow M_p | S_{p-2}$ ce qui donnerait une méthode relativement efficace pour savoir si $M_p$ est premier.

Travaux pratiques

  1. Programmez les deux algorithmes de détection des nombres premiers de Mersenne (la méthode directe et celle de Lucas.)
  2. Améliorez la fonction estPremier(), en la rendant plus rapide.
  3. Renseignez-vous sur les nombres de Fermat.
  4. Cherchez à rendre la méthode de Lucas vraiment plus efficace (chez moi, elle semble moins efficace que la méthode naïve).
  5. Utilisez ces nombres premiers pour réaliser un cryptage RSA.

Page Actions

Recent Changes

Group & Page

Back Links