Division et crible d'Erathosthène
A part peut-être Gauss, on a tous commencé par tester la primalité d'un entier de façon naïve. Rappelons que :
un entier n est premier si et seulement si ses seuls diviseurs sont 1 et n.Il suffit donc de parcourir tous les entiers entre 2 et n-1, puis de tester si cet entier divise n. Bien sûr, il est facile d'améliorer cet algorithme : si n n'est pas premier, un de ces diviseurs est plus petit que . Il ne suffit donc que de tester les entiers entre 2 et . La complexité de l'algorithme (le nombre d'opérations qu'il doit faire) est donc en :
Les plus grands nombres premiers du monde
Définition : Si p est un nombre premier, le nombre de Mersenne d'indice p est le nombre Mp=2p-1.
Ces nombres de Mersenne ne sont pas tous premiers (ce serait trop faciles), et d'ailleurs il y en a relativement peu qui le sont effectivement : on ne sait même pas s'il y en a une infinité. En revanche, on dispose d'un test particulièrement efficace pour tester s'ils sont premiers, le test de Lucas-Lehmer :
Théorème : On définit une suite (Sn) en posant :
Avec des notations plus mathématiques, Mp est premier si, et seulement si, Sp=0 (mod Mp).
Ce test est polynômial en le nombre de chiffres de Mp, puisqu'il faut calculer p termes de la suite, et que p est justement de l'ordre du nombre de chiffres de Mp. En outre, son implémentation informatique exploitant au mieux les particularités de l'arithmétique binaire est particulièrement efficace. C'est pourquoi le record du plus grand nombre premier jamais obtenu est toujours battu à l'aide de nombres de Mersenne. A titre d'exemple, M13466917 possède 4 053946 chiffres décimaux!
Pourtant, ces nombres premiers ne sont jamais utilisés pour la cryptographie. Ils sont bien trop particuliers, puisque l'on sait que (Mp+1) est une puissance de 2. Les chasseurs de code auraient alors beaucoup trop d'informations! Non, pour de telles applications, il n'y a rien de mieux qu'un nombre premier choisi totalement au hasard. Et pour cela, il n'y a rien de mieux que de tirer aléatoirement un nombre de 1000 chiffres, puis de tester s'il est premier. Nous revoici à notre point de départ....
- S2=4.
- Sn=(Sn-1)2-2.