<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nombres-Premiers | Dr. Goulu</title><link>https://drgoulu.com/tags/nombres-premiers/</link><atom:link href="https://drgoulu.com/tags/nombres-premiers/index.xml" rel="self" type="application/rss+xml"/><description>Nombres-Premiers</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Mon, 26 Jun 2017 00:00:00 +0000</lastBuildDate><image><url>https://drgoulu.com/media/icon_hu_eee4a95885829ab2.png</url><title>Nombres-Premiers</title><link>https://drgoulu.com/tags/nombres-premiers/</link></image><item><title>Suites infinies en Python</title><link>https://drgoulu.com/2017/06/26/series-infinies-et-oeis-en-python/</link><pubDate>Mon, 26 Jun 2017 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2017/06/26/series-infinies-et-oeis-en-python/</guid><description>&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://drgoulu.com/posts/2017/images/E6fJJ_hu_3b7898a4ec4efc1d.webp 320w, https://drgoulu.com/posts/2017/images/E6fJJ_hu_85290121cecac221.webp 480w, https://drgoulu.com/posts/2017/images/E6fJJ_hu_a5739bbe4b0b5dde.webp 600w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2017/images/E6fJJ_hu_3b7898a4ec4efc1d.webp"
width="600"
height="500"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
Depuis que je programme en Python, j&amp;rsquo;entasse les petits bouts de code utiles ou potentiellement réutilisables dans &amp;ldquo;Goulib&amp;rdquo;, ma librairie perso et néanmoins disponible en open-source (licence LGPL)  sur
, 
, ReadTheDocs pour
, avec des
&lt;/p&gt;
&lt;p&gt;Comme la valeur d&amp;rsquo;un code se mesure surtout par les tests qui vérifient son bon fonctionnement, je me suis lancé dans un ambitieux projet (de plus&amp;hellip;) : tester un maximum de fonctions de mes modules
et
 en calculant des suites de l&amp;rsquo; 
, plus connue sous son acronyme anglais OEIS.&lt;/p&gt;
&lt;p&gt;Pour cela j&amp;rsquo;ai fait un truc dont je suis vachement fier* :&lt;/p&gt;
&lt;h2 id="la-classe-sequence"&gt;La classe Sequence&lt;/h2&gt;
&lt;p&gt;Ce
(
) permet de représenter une
(sequence en anglais) finie ou infinie de nombres** à partir d&amp;rsquo;&amp;lsquo;une ou plusieurs fonctions passées à
:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iterf : un
ou générateur produisant les termes de la suite l&amp;rsquo;un après l&amp;rsquo;autre&lt;/li&gt;
&lt;li&gt;itemf : une fonction  retournant le i-ème paramètre de la suite&lt;/li&gt;
&lt;li&gt;containf : une fonction renvoyant vrai (True) si son paramètre appartient à la suite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On peut créer par exemple la série (infinie) des nombres premiers ainsi :&lt;/p&gt;
&lt;p&gt;
=Sequence(containf=
)&lt;/p&gt;
&lt;p&gt;Ensuite, l&amp;rsquo;objet ainsi créé avec n&amp;rsquo;importe quelle combinaison de ces 3 paramètres peut être utilisé indifféremment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;comme un générateur : for p in A000040() : print(p) # affiche les nombres premiers (jusqu&amp;rsquo;à l&amp;rsquo;infini)&lt;/li&gt;
&lt;li&gt;comme une liste: A000040
\[999\]# renvoie le 1000ème nombre premier (parce que Python indice à partir de 0&amp;hellip;)&lt;/li&gt;
&lt;li&gt;comme un ensemble: 201420142013 in A000040 # renvoie True car ce nombre est premier.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Evidemment, si on dispose de fonctions plus efficaces pour chacun de ces paramètres, on peut les utiliser pour rendre les calculs bien plus rapides. Par exemple pour la suite de Fibonacci, on peut exploiter trois algorithmes différents :&lt;/p&gt;
&lt;p&gt;
=Sequence(iterf=
, itemf=
, containf=
)&lt;/p&gt;
&lt;p&gt;En passant, voici comment est définie la séquence &amp;ldquo;auto descriptrice&amp;quot;qui orne la bannière de l&amp;rsquo;OEIS ci-dessus:&lt;/p&gt;
&lt;p&gt;
=Sequence( 
( lambda x: 
( 
( 
( 
( 
(x))))) ,1))&lt;/p&gt;
&lt;p&gt;Compact et presque clair, non ?&lt;/p&gt;
&lt;h2 id="dérivation"&gt;Dérivation&lt;/h2&gt;
&lt;p&gt;Une Sequence peut être dérivée d&amp;rsquo;une autre grâce à plusieurs méthodes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
renvoie une Sequence correspondant à la Sequence source filtrée par une fonction. Par exemple:
=A000040.filter(
) renvoie les &amp;ldquo;exposants de Mersenne&amp;rdquo;, les nombres premiers p tels que $2^p - 1$ est premier.&lt;/li&gt;
&lt;li&gt;
applique une fonction à chaque terme de la Sequence source. Par exemple la série des carrés des nombres premiers peut se définir ainsi:
=A000040.apply(lambda n:n*n)&lt;/li&gt;
&lt;li&gt;Pour éviter l&amp;rsquo;utilisation d&amp;rsquo;apply dans des cas trivialement simples, l&amp;rsquo;addition (et la soustraction) d&amp;rsquo;une Sequence et d&amp;rsquo;un entier sont définies. Par exemple:
=
+1 définit les
à partir des nombres de la forme $2^{2^n}$&lt;/li&gt;
&lt;li&gt;
renvoie une Sequence dont le n-ième terme est obtenu en sommant les n premiers termes de la Sequence source:
=A000040.accumulate()&lt;/li&gt;
&lt;li&gt;
renvoie une Sequence produite en appliquant applique une fonction à chaque paire de termes consécutifs. Ainsi la suite des différences entre nombres premiers consécutifs s&amp;rsquo;écrit:
=A000040.pairwise(operator.sub)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On peut aussi combiner deux Sequences pour en créer une nouvelle:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L&amp;rsquo;opérateur % (modulo, pourquoi pas&amp;hellip;) renvoie les termes de la Sequence opérande de gauche qui ne sont PAS dans l&amp;rsquo;opérande de droite. Ainsi:
=A000040 %
définit la Sequence des nombres premiers qui ne sont pas 
&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;opérateur &amp;amp; (and) renvoie les termes de la Sequence opérande de gauche qui sont aussi dans l&amp;rsquo;opérande de droite. Ainsi:
=
&amp;amp; A000040 définit la suite des nombres premiers dont qui ne s&amp;rsquo;écrivent qu&amp;rsquo;avec des 0 et des 1.&lt;/li&gt;
&lt;li&gt;L&amp;rsquo;opérateur | (or) renvoie la fusion de deux séquences à l&amp;rsquo;aide du génial
. Ainsi:
=
|
définit les nombres ayant 4 diviseurs (dont 1 et eux-mêmes) comme l&amp;rsquo;union de ceux qui sont le produit de deux nombres premiers avec ceux qui sont le cube d&amp;rsquo;un nombre premier.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il y a encore deux méthodes un peu &amp;ldquo;tirées par les cheveux&amp;rdquo; du point de vue mathématique, mais qui fonctionnent très bien informatiquement:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
 renvoie une Sequence
(par défaut) en triant les termes de la Sequence d&amp;rsquo;origine. Par exemple, voici la suites des surfaces des
 dans l&amp;rsquo;ordre croissant:
=Sequence(math2.primitive_triples).apply(lambda x:x
\[0\]*x
\[1\]//2) .sort()&lt;/li&gt;
&lt;li&gt;
 renvoie une Sequence où les termes redondants de la suite d&amp;rsquo;origine sont absents, par exemple:
 =
 .unique() // oui, parce que le 5 appartient à deux paires de nombres premiers jumeaux &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ces méthodes utilisent respectivement 
 et 
 qui fonctionnent tant que la suite initiale est &amp;ldquo;presque&amp;rdquo; triée, à savoir tant que l&amp;rsquo;écart n entre un terme $a_i+n \leq a_i$ n&amp;rsquo;excède pas le paramètre &amp;ldquo;buffer&amp;rdquo; de la fonction. On peut évidemment trouver des suites qui ne pourront &amp;ldquo;mathématiquement&amp;rdquo; pas être traitées ainsi, mais informatiquement j&amp;rsquo;arrive à reproduire les suites de l&amp;rsquo;OEIS rencontrées jusqu&amp;rsquo;ici avec buffer=100 seulement&lt;/p&gt;
&lt;h2 id="le-dictionnaire-oeis"&gt;Le dictionnaire OEIS&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;ai ainsi constitué peu à peu le fichier 
 qui définit actuellement environ 150 séries de l&amp;rsquo;OEIS, et que j&amp;rsquo;étoffe lorsque l&amp;rsquo;occasion se présente. A la fin de ce module, j&amp;rsquo;utilise la géniale possibilité d&amp;rsquo;introspection de Python pour regrouper toutes les Sequence définies dans un dictionnaire fort utile pour les tests:&lt;/p&gt;
\[python\]&lt;p&gt;# Construit le dictionnaire OEIS par introspection : Simple et WOW ! oeis={} # on crée le dictionnaire vide seqs=globals().copy() # on copie tous les objets déclarés dans ce module for id in seqs: # on parcourt tous les identificateurs des objets if id&lt;/p&gt;
\[0\]&lt;p&gt;==&amp;lsquo;A&amp;rsquo; and len(id)==7: # et s&amp;rsquo;ils ont un nom de séquence OEIS &amp;hellip; oeis&lt;/p&gt;
\[id\]&lt;p&gt;=seqs&lt;/p&gt;
\[id\]&lt;p&gt; # on les ajoute au dictionnaire &amp;hellip; seqs&lt;/p&gt;
\[id\]&lt;p&gt;.name=id # et on définit leur champ name &lt;/p&gt;
\[/python\]&lt;h2 id="performance"&gt;Performance&lt;/h2&gt;
&lt;p&gt;Un point important est qu&amp;rsquo;aucun calcul n&amp;rsquo;est effectué lors des opérations ci-dessus. Ce n&amp;rsquo;est qu&amp;rsquo;au moment d&amp;rsquo;utiliser les Sequence ainsi définies que les fonctions iterf, itemf, containf et leurs éventuelles compositions sont évaluées.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est un peu &amp;ldquo;automagique&amp;rdquo;, mais il faut tout de même veiller à utiliser les algorithmes les plus efficaces, et c&amp;rsquo;est même un des buts que je poursuis avec ce projet. Par exemple la suite des nombres premiers dont qui ne s&amp;rsquo;écrivent qu&amp;rsquo;avec des 0 et des 1
=
&amp;amp; A000040 aurait pu s’écrire également: A020449=A000040 &amp;amp; A007088 mais la première formulation est beaucoup plus rapide car la série A007088 des nombres ne s&amp;rsquo;écrivant qu&amp;rsquo;avec des 0 et des 1 croît beaucoup plus vite que celle des nombres premiers A000040. Il est par conséquent beaucoup plus rapide de tester si les nombres du genre 1101010101011101 sont premiers que d&amp;rsquo;énumérer tous les nombres premiers de 16 chiffres et de jeter ceux qui contiennent d&amp;rsquo;autres chiffres que des 0 ou 1.&lt;/p&gt;
&lt;p&gt;Malgré toutes ces précautions, parcourir une suite infinie prendra forcément un temps infini, et ces idiots d&amp;rsquo;ordinateurs ne sont toujours pas foutus de gérer le
. J&amp;rsquo;ai donc écrit un
 qui limite le temps de calcul d&amp;rsquo;une boucle ainsi :&lt;/p&gt;
&lt;p&gt;for x in
(suite,1): print(x) # affiche tous les termes calculables en 1 seconde (au total)&lt;/p&gt;
&lt;p&gt;Ce décorateur est utilisé en particulier dans
 la fonction appelée par 
 pour afficher les dix premiers termes d&amp;rsquo;une Sequence, ou du moins ceux qu&amp;rsquo;on peut calculer en moins d&amp;rsquo;une seconde.&lt;/p&gt;
&lt;p&gt;Les suites particulièrement lentes sont par exemple
ou 
 dont le n-ième terme donne le nombre de nombres inférieurs à 10^n  satisfaisant une certaine condition. Faute de meilleur algorithme, chaque terme prend 10x plus de temps que le précédent &amp;hellip;&lt;/p&gt;
&lt;h2 id="tests"&gt;Tests&lt;/h2&gt;
&lt;p&gt;Voià, tous les ingrédients sont prêts pour tester si mes beaux algorithmes fonctionnent correctement, ce qui était le but initial je le rappelle.&lt;/p&gt;
&lt;p&gt;Pour ceci, il suffit de vérifier que chaque Sequence fournit bien les mêmes termes que ceux disponibles dans l&amp;rsquo;OEIS. Ceci est facilité par le fait que l&amp;rsquo;OEIS fournit pour chaque suite les n premières valeurs dans un fichier texte en
accessible par le web. Par exemple 
 fournit les 10'000 premiers nombres premiers.&lt;/p&gt;
&lt;p&gt;Donc mon fichier 
 est lui aussi génialement simple* : il traverse le dictionnaire oeis et pour chaque Sequence il télécharge les N termes de référence du site OEIS, vérifie que les n premiers termes de la Sequence sont bien ceux attendus, et produit une erreur sinon. Ou un avertissement si itimeout a limité n à moins de 10.&lt;/p&gt;
&lt;p&gt;Ces tests sont automatiquement exécutés (avec beaucoup d&amp;rsquo;autres)
chaque fois que je pousse une nouvelle version de
, ce qui fait que je suis averti si modification crée un problème avec une ancienne version de Python ou si un Pingouin détecte un problème invisible de mes Fenêtres.&lt;/p&gt;
&lt;h2 id="débogage-de-loeis-"&gt;Débogage&amp;hellip; de l&amp;rsquo;OEIS !&lt;/h2&gt;
&lt;p&gt;J&amp;rsquo;ai ainsi beaucoup débogué, amélioré et optimisé la plupart des fonctions de  
et beaucoup d&amp;rsquo;
, et je compte poursuivre dans cette voie qui permet d&amp;rsquo;utiliser les données de l&amp;rsquo;OEIS comme une référence, validées par de nombreux utilisateurs.&lt;/p&gt;
&lt;p&gt;Sauf que des fois, le bug était chez eux. Et je ne suis pas peu fier d&amp;rsquo;
sur l&amp;rsquo;OEIS :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
 , comme déjà mentionné dans
, le 20ème terme de la série est 145, pas 142.&lt;/li&gt;
&lt;li&gt;
, dont certains termes avaient besoins de 0 supplémentaires. Tant qu&amp;rsquo;à faire j&amp;rsquo;ai fourni un B-file contenant les 1000 premiers termes exacts pour remplacer l&amp;rsquo;ancien qui n&amp;rsquo;en avait que 500.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A cette occasion j&amp;rsquo;ai remarqué que l&amp;rsquo;édition de l&amp;rsquo;OEIS est un peu rébarbative, ce qui peut décourager les contributeurs débutants. Peut-être que mon modeste projet pourrait servir de base à un site plus interactif, utilisant du code (Python of course) pour calculer dynamiquement les suites requises &amp;hellip;&lt;/p&gt;
&lt;p&gt;Ce long article mijoté pendant plus de six mois se termine par un appel aux allumés du code bonnes volontés : si cet article vous a motivé , n&amp;rsquo;hésitez pas à contribuer à la Goulib sur GitHub.&lt;/p&gt;
&lt;p&gt;Pour ma part je m&amp;rsquo;attaque aux
et
qui seront l&amp;rsquo;occasion de nettoyer le code du 
  en utilisant et testant le module 
&lt;/p&gt;
&lt;h3 id="notes"&gt;Notes&lt;/h3&gt;
&lt;p&gt;*sinon je n&amp;rsquo;en parlerais pas ici&amp;hellip; **ou d&amp;rsquo;autres objets mais je n&amp;rsquo;ai pas encore trouvé quoi&amp;hellip;&lt;/p&gt;</description></item><item><title>Comment trouver des nombres premiers</title><link>https://drgoulu.com/2012/04/15/comment-produire-des-nombres-premiers/</link><pubDate>Sun, 15 Apr 2012 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2012/04/15/comment-produire-des-nombres-premiers/</guid><description>&lt;figure class="alignright" style="max-width: 240px; width: 100%;"&gt;&lt;a href="http://www.flickr.com/photos/barabeke/2205492728/" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2012/images/1971d1afbb614c35babb0033c509adc3_hu_2b6421821314943b.webp" srcset="https://drgoulu.com/posts/2012/images/1971d1afbb614c35babb0033c509adc3_hu_2b6421821314943b.webp 240w" sizes="(max-width: 640px) 100vw, 240px" alt="the centrality of prime numbers par barabeke sur Flickr" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;/a&gt;&lt;figcaption&gt;&amp;quot;the centrality of prime numbers&amp;quot; par barabeke sur Flickr&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Les 
 ont beau être étudiés depuis au moins 2300 ans, ils n&amp;rsquo;ont jamais été aussi mystérieux ni utiles qu&amp;rsquo;aujourd&amp;rsquo;hui.&lt;/p&gt;
&lt;p&gt;Mystérieux, car la démonstration de l&amp;rsquo;
, qui permettrait de définir la répartition des nombres premiers, attend toujours son  
.&lt;/p&gt;
&lt;p&gt;Utiles, car nos cartes à puces, téléphones et ordinateurs consomment des quantités industrielles de &amp;ldquo;grands&amp;rdquo; nombres premiers, en particulier pour le cryptage 
. La sécurité de cette méthode &amp;ldquo;
&amp;rdquo; repose sur le fait que la 
 de grands nombres demande un temps prohibitivement long, alors qu&amp;rsquo;il est très rapide de trouver de grands nombres premiers.&lt;/p&gt;
&lt;h2 id="comment-trouver-de-petits-nombres-premiers"&gt;Comment trouver de petits nombres premiers&lt;/h2&gt;
&lt;p&gt;Ceci parait surprenant de prime abord, puisqu&amp;rsquo;on apprend à l&amp;rsquo;école à déterminer si n est premier en tentant de le diviser par les nombres premiers déjà connus inférieurs à √n, ce qui n&amp;rsquo;est autre qu&amp;rsquo;une factorisation. On découvre à l&amp;rsquo;école aussi le 
, qui fournit depuis 2000 ans les nombres premiers les uns après les autres à tous les heureux possesseurs de feuilles quadrillées ou de mémoires informatiques:&lt;/p&gt;
&lt;figure class="aligncenter" style="max-width: 554px; width: 100%;"&gt;&lt;a href="http://fr.wikipedia.org/wiki/Crible_d%27%C3%89ratosth%C3%A8ne" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2012/images/246979fd8d7bdf29a95cdb2e08cd2e89.gif" alt="Animation du Crible d&amp;#39;Erathosthène (Wikipédia)" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" /&gt;&lt;/a&gt;&lt;figcaption&gt;Animation du Crible d&amp;rsquo;Erathosthène (Wikipédia)&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Cette méthode n&amp;rsquo;a été légèrement améliorée qu&amp;rsquo;en 1999 avec le
 et reste excellente pour créer des listes de nombres premiers consécutifs. Ainsi le site 
 les fournit tous jusqu&amp;rsquo;à  32 416 187 567 *&lt;/p&gt;
&lt;p&gt;Mais alors, comment le célèbre
a-t-il pu répondre en 1643 à un certain
 (dont nous reparlerons plus bas):&lt;/p&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Vous me demandez si le nombre 100 895 598 169 est premier ou non, et une méthode pour découvrir, dans l&amp;rsquo;espace d&amp;rsquo;un jour, s&amp;rsquo;il est premier ou composé. À cette question, je réponds que ce nombre est composé et se fait du produit de ces deux : 898423 et 112303, qui sont premiers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Et bien parce que 3 ans plus tôt il avait pondu et démontré lui-même son
, qui constitue en même temps
 
probabiliste. Grâce à cela,  il a su &amp;ldquo;rapidement&amp;rdquo; que 100895598169 n&amp;rsquo;est pas premier. Par contre, comment il a effectué les opérations et factorisé le nombre avec un papier et un crayon en un seul jour, ça je n&amp;rsquo;en ai avais aucune idée **&lt;/p&gt;
&lt;p&gt;Et je ne sais pas non plus comment Mersenne a généré 898423 et 112303 parce que bizarrement, ce ne sont pas des nombres de Mersenne, dont nous parlerons plus bas&amp;hellip; En fait, ô surprise, 898423 = 112303 x 23-1, donc Mersenne a généré le grand premier à partir du petit, lequel a d&amp;rsquo;ailleurs la même forme : 112303 = 7019 x 24-1.&lt;/p&gt;
&lt;h2 id="comment-trouver-de-très-grands-nombres-premiers"&gt;Comment trouver de très grands nombres premiers&lt;/h2&gt;
&lt;p&gt;Il existe donc des méthodes pour générer des nombres premiers. Aucune ne produit des nombres premiers &amp;ldquo;à tous les coups&amp;rdquo; ( ce serait le Graal que certains recherchent encore mais qui n&amp;rsquo;existe probablement pas ), mais ces méthodes fournissent des grands nombres qui ont une probabilité d&amp;rsquo;être premiers nettement plus élevée que des nombres de même taille choisis au hasard.&lt;/p&gt;
&lt;p&gt;Au IXème siècle déjà, 
 avait remarqué que pas mal de petits nombres premiers ont la forme &amp;ldquo;321&amp;rdquo; p = 3×2n-1 . Les 
 sont listés dans 
. Le plus grand connu actuellement est 3×24235414−1 mais aussi 3×27033641+1 qui n&amp;rsquo;est pas strictement un Thabit à cause du +1 au lieu du -1 final.&lt;/p&gt;
&lt;p&gt;Les  
 ont une forme encore plus simple : p = 2n-1 où n est premier. Et Mersenne ne les a pas découverts : 
 connaissait déjà les plus petits ( 3, 7, 31 et 127 ) en 300 avant J.C. Mersenne en a juste fait une
 en ajoutant 8191 découvert par Ibn Fallus au XIIIème siècle et 131071 et 524287 découverts par 
 en 1588. Et puis il s&amp;rsquo;est planté magistralement : sa liste incluait les nombres  267-1 et 2257-1 qui ne sont pas premiers et omettait 231-1, 261-1, 289-1 et 2107-1 qui le sont. C&amp;rsquo;est dommage, car Mersenne n&amp;rsquo;a ainsi jamais détenu le record du plus grand nombre premier qui a
un nombre de Mersenne. Depuis 2009, le record est 243112609-1 , qui compte 12 837 064 chiffres, trouvé grâce au programme
. Le rôle de ce logiciel est surtout de faire passer le génial 
 qui est déterministe (non probabiliste) mais ne marche qu&amp;rsquo;avec les Mersenne.&lt;/p&gt;
&lt;p&gt;Bref, aucun nombre de Mersenne n&amp;rsquo;est de Mersenne et si je n&amp;rsquo;avais pas autant de lecteurs en République Française, je proposerais de les rebaptiser &amp;ldquo;
&amp;rdquo; pour souligner leur beauté en binaire. En effet, 2n-1 s&amp;rsquo;écrit simplement avec une suite de n &amp;ldquo;1&amp;rdquo; en binaire. Par exemple 127= 27-1 s&amp;rsquo;écrit 1111111 en binaire.&lt;/p&gt;
&lt;p&gt;Il existe plusieurs autres formules fournissant des candidats premiers :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les
 de la forme 22n + 1. Fermat pensait qu&amp;rsquo;ils étaient tous premiers, mais c&amp;rsquo;est faux : seuls les 5 premiers le sont, les 28 suivants ne le sont pas, et les autres sont trop grands pour être testés.&lt;/li&gt;
&lt;li&gt;Les 
 sont de la forme k·2n+1 ( 
 , record 659×2617815+1 )&lt;/li&gt;
&lt;li&gt;
 : n·2n--1 ( 
, 3752948 × 23752948 − 1)&lt;/li&gt;
&lt;li&gt;
 : n·2n+1 ( 
, 6679881 · 26679881 + 1)&lt;/li&gt;
&lt;li&gt;les &amp;ldquo;Cullen généralisés&amp;rdquo; : n·bn+1,où n+2 &amp;gt; b ( record 427194 × 113427194 + 1)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;on voit qu&amp;rsquo;elles sont toutes des généralisations ou cas particuliers des autres, et que les repunits y jouent un  rôle important. Les
 (PSG) sont des nombres p tels que 2p+1 est aussi premier (
). Ce &amp;ldquo;générateur&amp;rdquo; fournit des nombres moins grands que les autres, mais soulève plein de questions intéressantes : quelle est la longueur maximale d&amp;rsquo;une
 formée par des PSG, y&amp;rsquo;a-t-il une infinité de PSG etc. Et de plus, le 
 établit un lien entre le &amp;ldquo;petit &amp;quot; théorème de Fermat susmentionné et
 qui a obsédé les matheux jusqu&amp;rsquo;en 1994. Et comme je n&amp;rsquo;ai pas compris grand chose à sa démonstration, je suis plein d&amp;rsquo;admiration pour cette dame autodidacte qui étonna les mâlethématiciens d&amp;rsquo;il y a 200 ans.&lt;/p&gt;
&lt;p&gt;Si vous voulez vous aussi devenir célèbre, mais facilement, participez à
, une application de la plateforme de calcul distribuée BOINC qui chasse les records de grands nombres premiers. Avec un peu de chance le prochain grand nombre premier sera découvert sur votre ordinateur tout en
.&lt;/p&gt;
&lt;h2 id="comment-trouver-des-nombres-premiers-dune-longueur-donnée"&gt;Comment trouver des nombres premiers d&amp;rsquo;une longueur donnée&lt;/h2&gt;
&lt;p&gt;Fin 2009, une équipe internationale a cracké un code 
, en factorisant le produit de deux nombres premiers de 120 chiffres à l&amp;rsquo;aide de l&amp;rsquo;
 et de beaucoup d’ordinateurs. Cet exploit signifie qu&amp;rsquo;une clé RSA nécessite aujourd&amp;rsquo;hui des nombres premiers d&amp;rsquo;au moins 512 bits, soit 154 chiffres décimaux pour être indécryptable.&lt;/p&gt;
&lt;p&gt;Nous avons vu plus haut comment obtenir tous les nombres premiers nettement plus courts, ou quelques nombres premiers nettement plus longs, mais pour RSA, nous avons besoin d&amp;rsquo;obtenir en quelques secondes des nombres premiers de 154 chiffres, avec un seul petit processeur enfermé dans le boitier d&amp;rsquo;un routeur par exemple, et sans que le nombre transite par un réseau où il pourrait être intercepté. De plus, le nombre ne doit pas être stocké dans une table dont un pirate pourrait essayer les combinaisons : il doit être généré aléatoirement.&lt;/p&gt;
&lt;p&gt;Mais au fait, existe-t-il beaucoup de nombres premiers de 154 chiffres ? Oh que oui : la densité des nombres premiers autour de n est de 1/ln(n), or 
 donne environ 0.3% : environ 3 nombres de 154 chiffres sur 1000 sont premiers, donc il y en a des giga milliards de floppées. Donc tout ce que notre petit routeur a à faire de temps en temps c&amp;rsquo;est:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;générer un nombre aléatoire de 154 chiffres en tirant au hasard 511 bits à pile ou face, et en ajoutant un 512ème bit = 1 pour faire un nombre impair. facile et ultra rapide.&lt;/li&gt;
&lt;li&gt;vérifier si le nombre est premier à l&amp;rsquo;aide d&amp;rsquo;un  
 plus  moderne que celui de Fermat comme celui de 
.&lt;/li&gt;
&lt;li&gt;si le test dit que le nombre n&amp;rsquo;est pas premier, ajouter 2 au nombre aléatoire pour obtenir le nombre impair suivant et recommencer l&amp;rsquo;opération 2. Il faudra  répéter ceci en moyenne 300 fois avant que Miller et Rabin disent &amp;ldquo;probablement premier&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pour vous faire une idée de la vitesse de ceci, allez au milieu de 
 et cliquez le bouton &amp;ldquo;auto generate prime number p and q&amp;rdquo; : vous obtiendrez 2 nombres premier de 512 bits pour le prix d&amp;rsquo;un seul click.&lt;/p&gt;
&lt;figure class="aligncenter" style="max-width: 628px; width: 100%;"&gt;&lt;a href="http://www.mobilefish.com/services/rsa_key_generation/rsa_key_generation.php" target="_blank" rel="noopener"&gt;&lt;img src="https://drgoulu.com/posts/2012/images/0974521d6a6097b331bf7dee56484ed8_hu_904549a01922568c.webp" srcset="https://drgoulu.com/posts/2012/images/0974521d6a6097b331bf7dee56484ed8_hu_904549a01922568c.webp 320w, https://drgoulu.com/posts/2012/images/0974521d6a6097b331bf7dee56484ed8_hu_47f7922d35a5bb1d.webp 480w, https://drgoulu.com/posts/2012/images/0974521d6a6097b331bf7dee56484ed8_hu_d4317558821990d4.webp 628w" sizes="(max-width: 640px) 100vw, 628px" alt="onlineprime" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;/a&gt;&lt;figcaption&gt;cliquez sur l&amp;rsquo;image et scrollez vers le milieu de la page&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Oui mais, me direz vous, les tests probabilistes ne garantissent pas absolument que les nombres soient premiers. Il y a un risque qu&amp;rsquo;on encode le message avec une clé foireuse, et donc qu&amp;rsquo;il soit &amp;ldquo;facile&amp;rdquo; à décoder. Effectivement, mais on admet généralement que la probabilité qu&amp;rsquo;un nombre de cette taille soit
 est de l&amp;rsquo;ordre d&amp;rsquo;une sur 1030. Et si votre message est si précieux que vous n&amp;rsquo;êtes pas prêt à courir ce risque, réfléchissez à
 : le risque qu&amp;rsquo;un rayon cosmique change un bit du nombre pendant un test de primalité déterministe est un million de fois plus élevé ! J&amp;rsquo;aime bien cette idée qu&amp;rsquo;un algorithme probabiliste soit plus fiable qu&amp;rsquo;une machine considérée comme déterministe, pas vous ?&lt;/p&gt;
&lt;p&gt;Notes :&lt;/p&gt;
&lt;p&gt;* 32'416'187'567 est tellement proche de 8*2^32 que j&amp;rsquo;ai une petite idée de la mémoire utilisée par le crible&amp;hellip;&lt;/p&gt;
&lt;p&gt;** ajout du 18 mai 2014 : Blogdemaths a éclairé ma lanterne à ce sujet dans un article intitulé &amp;ldquo;
&amp;rdquo;&lt;/p&gt;
&lt;h2 id="pour-en-savoir-plus"&gt;Pour en savoir plus&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
sur le Site du Zéro&lt;/li&gt;
&lt;li&gt;&lt;span class="openbook_template5"&gt;&lt;a href="http://openlibrary.org/authors/OL1121250A/Jean-Paul_Delahaye" title="Click to view author in Open Library" target="_blank" rel="noopener"&gt;Jean-Paul Delahaye&lt;/a&gt; (2000). &lt;a href="http://openlibrary.org/books/OL8942978M/Merveilleux_nombres_premiers" title="Click to view title in Open Library" target="_blank" rel="noopener"&gt;Merveilleux nombres premiers&lt;/a&gt;. Pour la Science.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;amp;rft.genre=book&amp;amp;rft.btitle=Merveilleux+nombres+premiers&amp;amp;rft.isbn=9782842450175&amp;amp;rft.au=Jean-Paul+Delahaye&amp;amp;rft.pub=Pour+la+Science&amp;amp;rft.date=2000"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;
 : une librairie Python avec les fonctions qu&amp;rsquo;il faut&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Sommes Egales de Nombres Premiers Consécutifs</title><link>https://drgoulu.com/2008/06/03/sommes-egales-de-nombres-premiers-consecutifs/</link><pubDate>Tue, 03 Jun 2008 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2008/06/03/sommes-egales-de-nombres-premiers-consecutifs/</guid><description>&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://drgoulu.com/posts/2008/images/389c66e7ddab342c9a24fd6e80fd3c65_hu_fd262a323e2485f5.webp 320w, https://drgoulu.com/posts/2008/images/389c66e7ddab342c9a24fd6e80fd3c65_hu_b848df796048d1a5.webp 480w, https://drgoulu.com/posts/2008/images/389c66e7ddab342c9a24fd6e80fd3c65_hu_24c0678be981a15f.webp 512w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2008/images/389c66e7ddab342c9a24fd6e80fd3c65_hu_fd262a323e2485f5.webp"
width="512"
height="512"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
Le quatrième et dernier problème de la
mérite un article à lui tout seul. (J&amp;rsquo;ai parlé des trois autres dans
)&lt;/p&gt;
&lt;p&gt;Il s&amp;rsquo;agit de trouver le plus petit
P qui soit en même temps :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la somme de 9 nombres premiers consécutifs&lt;/li&gt;
&lt;li&gt;la somme de 119 nombres premiers consécutifs&lt;/li&gt;
&lt;li&gt;la somme de 215 nombres premiers consécutifs&lt;/li&gt;
&lt;li&gt;et la somme de 675 nombres premiers consécutifs !&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(les nombres 9, 119, 215 et 675 sont différents pour chaque concurrent&amp;hellip;)&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est étonnant, mais beaucoup de nombres premiers sont des sommes de nombres premiers consécutifs (abrégé SNPC ci après), par exemple :&lt;/p&gt;
&lt;p&gt;5+7+11+13+17 = 53 7+11+13+17+19 =67 11+13+17+19+23 =83&lt;/p&gt;
&lt;p&gt;De plus, il est fréquent qu&amp;rsquo;un même nombre premier soit égal à plusieurs SNPC. Par exemple sur
on mentionne:&lt;/p&gt;
&lt;p&gt;34421 = 269 + … + 709 (71 nombres premiers) 34421 = 1429 + … + 1571 (23 nombres premiers) 34421 = 3793 + … + 3853 (9 nombres premiers) 34421 = 4889 + … + 4937 (7 nombres premiers) 34421 = 11467 + … + 11483 (3 nombres premiers)&lt;/p&gt;
&lt;p&gt;Le nombre P recherché n&amp;rsquo;est donc peut-être pas très grand, d&amp;rsquo;autant que la somme des 675 premiers nombres premiers ne vaut que 1'578'242. Il n&amp;rsquo;y a probablement pas besoin de calculer en &amp;ldquo;bigint&amp;rdquo;, les entiers sur 32 bits, voire 64 disponibles avec n&amp;rsquo;importe quel langage de programmation devraient suffire. Par contre, il est pratique de disposer de fonctions prédéfinies pour manipuler des nombres premiers, c&amp;rsquo;est pourquoi j&amp;rsquo;ai choisi d&amp;rsquo;utiliser
.&lt;/p&gt;
&lt;p&gt;Les fonctions suivantes suffisent pour résoudre le problème posé: &lt;em&gt;(code modifié le 4/6/8 suite aux commentaires de b0z0)&lt;/em&gt;&lt;/p&gt;
\[gist id="0e35207dedf4e337c937"\]&lt;p&gt;La fonction SCP (Sum of Consecutive Primes) renvoie la somme des n nombres premiers consécutifs en commençant par le i-ème nombre premier en utilisant la fonction prédéfinie Prime&lt;/p&gt;
\[j\]&lt;p&gt; qui renvoie directement le j-ème nombre premier.&lt;/p&gt;
&lt;p&gt;Cette somme n&amp;rsquo;étant pas forcément un nombre premier, la fonction PSP (Prime Sum of Primes) appelle répétitivement SCP en augmentant i jusqu&amp;rsquo;à ce que la somme soit un nombre premier, vérifié grâce au test de primalité
, une fonction non triviale bien utile ici. Pour une raison expliquée plus bas, PSP renvoie une paire de résultats : la somme, et l&amp;rsquo;indice du premier nombre premier de la somme.&lt;/p&gt;
&lt;p&gt;Enfin, la fonction CPSP (Compound Prime Sum of Primes) implante l&amp;rsquo;algorithme que j&amp;rsquo;ai inventé pour la circonstance. Elle prend en paramêtre la liste des nombres de nombres premiers consécutifs sommés. Pour résoudre notre problème, on appellera  CPSP&lt;/p&gt;
\[{675, 215, 119, 9}\]&lt;ol&gt;
&lt;li&gt;on initialise une liste p avec les n résultats de PSP obtenus pour chacun des nombres de nombres premiers consécutifs à additioner. Ainsi, pour CPSP
\[{675, 215, 119, 9}\], p est initialisé à {{1583291,2},{149993,15},{41641,10},{127,2}}. Autrement dit, 1583291 est le plus petit nombre premier qui soit la somme de 675 nombres premiers consécutifs, et cette somme commence avec le 2ème nombre premier. 149993 est le plus petit nombre premier qui soit la somme de 215 nombres premiers, en commençant par le 15ème, et ainsi de suite&lt;/li&gt;
&lt;li&gt;par paresse (qualité indispensable chez les programmeurs&amp;hellip;) , la détection de la fin de l&amp;rsquo;algorithme est réduite au minimum vital : dès que la liste p n&amp;rsquo;est plus modifiée par l&amp;rsquo;algorithme, on arrête&lt;/li&gt;
&lt;li&gt;Pour chaque élément de la liste p en commençant par le deuxième, on regarde si la somme est inférieure à la somme du premier indice. Si c&amp;rsquo;est le cas, on calcule une somme supérieure en incrémentant l&amp;rsquo;indice correspondant, jusqu&amp;rsquo;à ce que la somme soit égale à la première, ou la dépasse. Après cette étape, la liste p devient {{1583291,10},{1600981,840},{1589563,1526},{1584829,15997}} : on voit que les sommes 2,3 et 4 ont dépassé la somme 1&lt;/li&gt;
&lt;li&gt;Si la somme 1 est plus petite que la somme 2, on augmente la somme 1 jusqu&amp;rsquo;à ce que&amp;rsquo;elle atteigne ou dépasse la somme 2. On arrive ainsi à {{1623917,10},{1600981,840},{1589563,1526},{1584829,15997}}. On boucle au point 2&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Les trois dernières boucles donnent les listes suivantes qui montrent bien le fonctionnement de l&amp;rsquo;algorithme:&lt;/p&gt;
&lt;p&gt;{{8256361,1127},{8112103,3883},{8115539,6728},{8112787,71376}} {{8275409,1130},{8259353,3947},{8264171,6833},{8256383,72536}} {{8275409,1130},{8275409,3954},{8275409,6841},{8275409,72696}}&lt;/p&gt;
&lt;p&gt;et voilà : 8'275'409 est égale à la somme des:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;675 nombres premiers consécutifs à partir du 1130-ème (9109)&lt;/li&gt;
&lt;li&gt;215 nombres premiers consécutifs à partir du 3954-ème (37339)&lt;/li&gt;
&lt;li&gt;119 nombres premiers consécutifs à partir du 6841-ème (68821)&lt;/li&gt;
&lt;li&gt;9 nombres premiers consécutifs à partir du 72696-ème (919421)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quelques minutes pour choisir le bon outil (Mathematica) + quelques minutes de programmation + 30 secondes de calcul, c&amp;rsquo;est gagné !&lt;/p&gt;</description></item><item><title>les Nombres Premiers</title><link>https://drgoulu.com/2007/01/20/les-nombres-premiers/</link><pubDate>Sat, 20 Jan 2007 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2007/01/20/les-nombres-premiers/</guid><description>&lt;p&gt;&lt;em&gt;A l’occasion de la découverte de la plus grande paire de nombres premiers jumeaux, et en parallèle avec la rédaction d’un articule sur le calcul distribué, j’ai partiellement ré-écrit cet article de 2005 sur les nombres premiers.&lt;/em&gt;&lt;/p&gt;
&lt;h4 id="introduction"&gt;Introduction&lt;/h4&gt;
&lt;p&gt;Un nombre P est premier s&amp;rsquo;il ne se divise que par 1 ou lui-même. Il n&amp;rsquo;est donc &amp;ldquo;pas dans le livret&amp;rdquo;, autrement dit, il n&amp;rsquo;existe pas deux nombres entiers A et B plus grands que 1 tels que A x B = P.&lt;/p&gt;
&lt;p&gt;Les premiers nombres premiers sont 2,3,5,7,11,13,17,19,23,29,31 &amp;hellip;&lt;/p&gt;
&lt;p&gt;Le grands nombres premiers ont une grande importance pratique en cryptographie, donc dans les dispositifs de sécurité informatique ou électronique, les systèmes de paiement etc.&lt;/p&gt;
&lt;p&gt;Ces systèmes vitaux actuellement se basent sur des idées connues depuis des millénaires, mais qui n&amp;rsquo;ont été prouvées que récemment. Par exemple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;pour être absolument certain qu&amp;rsquo;un nombre N est premier, il faut essayer de le factoriser (trouver ses facteurs A et B, par lesquels on pourrait diviser N), ce qui implique d&amp;rsquo;essayer un grand nombre de divisions, et ça prend beaucoup de temps.&lt;/li&gt;
&lt;li&gt;il existe des &amp;ldquo;tests de primalité&amp;rdquo; qui peuvent dire très rapidement si un nombre est &amp;ldquo;très probablement&amp;rdquo; premier ou pas, sans effectuer de factorisation : si le test dit que le nombre n&amp;rsquo;est pas premier, il n&amp;rsquo;en fournit pas les facteurs.&lt;/li&gt;
&lt;li&gt;il n&amp;rsquo;existe pas de formule qui donnent à coup sur des nombres premiers, mais il en existe qui marchent une 40aine de fois de suite, ce qui n&amp;rsquo;est pas mal du tout:
&lt;ul&gt;
&lt;li&gt;103n2-3945n + 34381 est premier pour n=0,1,&amp;hellip;,42 (R. Ruby)&lt;/li&gt;
&lt;li&gt;47n2^2-1710n + 10181 est premier pour n=0,1,&amp;hellip;,42 (G. Fung)&lt;/li&gt;
&lt;li&gt;36n2^2-810n + 2753 est premier pour n=0,1,&amp;hellip;,44 (R. Ruby)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="nombres-de-mersenne-et-grands-nombres-premiers"&gt;Nombres de Mersenne et grands nombres premiers&lt;/h3&gt;
&lt;p&gt;Les &amp;ldquo;nombres de Mersenne&amp;rdquo; 2n-1 sont &amp;ldquo;assez souvent&amp;rdquo; des nombres premiers, par exemple:&lt;/p&gt;
&lt;p&gt;22-1=3, 23-1=7, 25-1=31, 27-1=127, 213-1=8191&lt;/p&gt;
&lt;p&gt;Comme 2^n-1 est une fonction exponentielle, on peut trouver &amp;ldquo;facilement&amp;rdquo; de très grands nombres premiers&lt;/p&gt;
&lt;p&gt;En 1588, P. Cataldi calcul a que 217-1=131071 et 219-1 = 524 287 sont premiers, puis Euler en 1750 prouva que 231-1=147'483'647 est premier.&lt;/p&gt;
&lt;p&gt;S&amp;rsquo;ensuivit une course au plus grand nombre premier dont on trouve un
&lt;/p&gt;
&lt;p&gt;En 1878,
énonça un test de primalité très puissant, qui lui permit de prouver que 2127-1 = 170141183460469231731687303715884105727 est premier, sans effectuer les divisions&lt;/p&gt;
&lt;p&gt;les nombres premiers suivants furent découvert dès 1952 avec des ordinateurs.&lt;/p&gt;
&lt;p&gt;Actuellement, le plus grand nombre premier connu est 232'582'657-1. Il fait 9'808'358 décimales et à été découvert en septembre 2006 par le projet
, dont je reparle dans un
.&lt;/p&gt;
&lt;h3 id="nombres-premiers-jumeaux"&gt;Nombres premiers jumeaux&lt;/h3&gt;
&lt;p&gt;En examinant la différence entre des nombres premiers consécutifs, on s&amp;rsquo;aperçoit qu&amp;rsquo;elle vaut plus souvent 2 que toute autre valeur. Il existe donc des nombres premiers &amp;ldquo;jumeaux&amp;rdquo; : 5-7, 11-13, 17-19 par exemple, mais on en connait de beaucoup plus grands. En fait on pense qu&amp;rsquo;il existe une infinité de telles paires. Comment les trouver ? Par exemple en cherchant &amp;ldquo;autour&amp;rdquo; des nombres de Mersenne !&lt;/p&gt;
&lt;p&gt;Le 15 janvier 2007, des nombres premiers jumeaux de 58'711 décimales ont été
, également en utilisant le
. Ce sont 2'003'663'613 × 2195'000±1&lt;/p&gt;
&lt;h4 id="curiosités"&gt;Curiosités&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;La Spirale d’Ulam&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un matheux nommé Ulam s’ennuyait à une conférence et à commencé à écrire les nombres 1,2,3,4 etc en spirale sur du papier quadrillé, puis à noircir les cases correspondant aux nombres premiers.&lt;/p&gt;
&lt;p&gt;A sa grande surprise il a vu apparaitre des &amp;ldquo;lignes&amp;rdquo; obliques qui correspondent à des fonctions génératrices de nombres premiers de forme a.n2+b.n + c, comme les fonctions mentionnées plus haut. (voir la
)&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;En généralisant, on peut colorier les cases de la spirale d’Ulam avec une couleur représentant le nombre de facteurs premiers de chaque case. Mais ma représentation préférée est celle-ci, dans laquelle le nombre de facteurs définit le rayon de petites boules centrées à chaque case :&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Un copain métaphysique m’a sommé de mentionner aussi la &amp;ldquo;Croix de Plichta&amp;rdquo;, mais il s’agit AMHA d’une justification un peu simpliste de la théorie ésotérique un peu planante de monsieur Plichta&amp;hellip;&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;Pourquoi simpliste :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;2 et 3 sont des premiers par définition. Pourtant ils ne sont pas marqués comme tels dans la croix.&lt;/li&gt;
&lt;li&gt;Le nombre situé sur le rayon R (de 1 à 24) au Nième tour s’écrit R+24*(N-1). Donc si R est multiple de 2 ou 3, tous les nombres sur les mêmes rayons le seront aussi et ne seront donc pas premiers. La &amp;ldquo;croix&amp;rdquo; résulte donc d’un &amp;ldquo;crible&amp;rdquo; par 2 et 3.&lt;/li&gt;
&lt;li&gt;Les nombres sur les rayons magiques ne sont pas tous premiers, et c’est bien là le problème&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bref, ne pas se laisser impressionner par une quelconque régularité apparente des petits nombres premiers&amp;hellip;&lt;/p&gt;
&lt;h4 id="références"&gt;Références&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;&lt;span class="openbook_template5"&gt;&lt;a href="http://openlibrary.org/authors/OL1121250A/Jean-Paul_Delahaye" title="Click to view author in Open Library" target="_blank" rel="noopener"&gt;Jean-Paul Delahaye&lt;/a&gt; (2000). &lt;a href="http://openlibrary.org/books/OL8942978M/Merveilleux_nombres_premiers" title="Click to view title in Open Library" target="_blank" rel="noopener"&gt;Merveilleux nombres premiers&lt;/a&gt;. Pour la Science.&lt;span class="Z3988" title="ctx_ver=Z39.88-2004&amp;amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;amp;rft.genre=book&amp;amp;rft.btitle=Merveilleux+nombres+premiers&amp;amp;rft.isbn=9782842450175&amp;amp;rft.au=Jean-Paul+Delahaye&amp;amp;rft.pub=Pour+la+Science&amp;amp;rft.date=2000"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-3"&gt;&lt;/span&gt;articles de Jean-Paul Delahaye dans
&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-4"&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item></channel></rss>