Grille de nombres premiers
(susam.net)- La grille de nombres premiers est un outil qui visualise les motifs et la structure des nombres premiers
- Cette grille dispose les nombres en 2D, ce qui permet de voir d’un coup d’œil comment les nombres premiers se répartissent
- L’analyse de ces motifs peut apporter des éclairages sur la régularité ou le caractère aléatoire des nombres premiers
- Elle aide les apprenants en programmation et en mathématiques à comprendre intuitivement la théorie des nombres premiers
- Elle peut servir de référence pour explorer la répartition des nombres premiers sous différents angles
Aperçu de la grille de nombres premiers
- Cet outil a pour but d’organiser les nombres dans une grille bidimensionnelle, puis de distinguer visuellement si chaque case correspond ou non à un nombre premier
- L’utilisateur peut définir la plage des lignes et des colonnes afin de générer des grilles de tailles et de formes variées
- Dans la grille, les nombres premiers sont clairement distingués par une couleur ou un marqueur, ce qui permet de voir immédiatement comment ils se distribuent
- Il devient plus facile d’explorer des motifs comme les distributions régulières, les diagonales ou les clusters, ce qui en fait une ressource utile pour développer l’intuition mathématique
- Cet outil fournit aux développeurs et aux étudiants une source de référence exploitable pour des travaux sur les algorithmes ou la visualisation
Caractéristiques et exemples d’usage
- La position de chaque nombre reflète un résultat d’identification rapide de son caractère premier
- Il peut traiter un grand volume de nombres en une seule fois, permettant d’explorer la distribution des nombres premiers même pour de grandes valeurs
- Il est facile à personnaliser avec différentes formes de grille (carré, rectangle, etc.)
- C’est une ressource utile pour l’apprentissage et l’analyse en enseignement des mathématiques, en recherche algorithmique et dans les présentations visuelles
- Il peut être utilisé non seulement pour l’exploration mathématique, mais aussi dans divers contextes comme les défis de programmation ou les entretiens techniques
1 commentaires
Avis Hacker News
Bonjour ! J’ai créé ce petit outil simple de visualisation de grille de nombres premiers pour m’amuser hier soir. Je me suis inspiré d’un post « Show HN » tombé par hasard il y a quelques jours. Il utilise le test de primalité de Miller-Rabin et prend comme base les nombres premiers de la suite OEIS A014233, ce qui permet même de tester la primalité jusqu’à 3317044064679887385961980. Vous pouvez voir un exemple via ce lien. Les trois cercles qu’on y voit correspondent aux nombres premiers suivants : 3317044064679887385961783
3317044064679887385961801
3317044064679887385961813
J’espère que ça vous amusera aussi.
La visualisation est vraiment superbe ! Ce serait bien d’ajouter une fonction qui affiche quel nombre premier c’est lorsqu’on survole un point avec la souris. Et je me demande si on verrait de nouveaux motifs en augmentant de X le nombre de colonnes à chaque ligne, ou en prenant X comme nombre premier.
Merci d’avoir fait ça ! C’est vraiment amusant d’augmenter rapidement le nombre de colonnes et de repérer des motifs récurrents, de petits mouvements en spirale ou de grandes lignes courbes. Quand j’étais enfant, j’adorais l’aspect puzzle logique des maths, mais vers la fin du lycée et à l’université, les maths m’ont paru de plus en plus abstraites et j’ai commencé à les trouver difficiles. Si j’avais eu des outils de visualisation comme celui-ci, j’aurais peut-être ressenti les concepts mathématiques de façon plus concrète et gardé ma curiosité pour les relations cachées derrière les formules.
Ce serait aussi très intéressant de pouvoir changer la base numérique en 16 ou dans d’autres bases. Je suis très curieux de voir quels changements de motifs cela produirait.
C’est trop cool ! En voyant ce que tu avais fait, je me suis moi aussi lancé à fond dans l’exploration visuelle des motifs :D Mais comme on peut finalement réorganiser librement colonnes et lignes, j’ai eu l’impression que ma tentative n’avait pas beaucoup de sens au final :D
Je présente une approche un peu étrange : je considère les entiers par paquets de 100. S’il y a un nombre premier dans un paquet, je le colorie en noir, sinon en rouge. Le premier paquet contient 100 entiers consécutifs, le deuxième en contient un sur deux, le troisième un sur trois, etc. Chaque paquet commence là où le précédent s’est arrêté. La 1re ligne contient un paquet, la 2e en contient deux, la 3e en contient trois, et ainsi de suite. Il y a une image ici. On dirait des hiéroglyphes venus d’un autre univers. Je ne comprends pas encore vraiment pourquoi ça prend cette forme. Pour comparer avec une distribution aléatoire, on peut modifier le code comme ceci : if (isPrime(myNum)) return 1; par if (Math.random()>0.99) return 1; et la différence est flagrante. Je suis vraiment curieux de savoir d’où viennent la symétrie et les propriétés de ces motifs fondés sur les nombres premiers.
Ce commentaire explique bien l’image. En substance, c’est une visualisation de gcd(x,y), et cela n’a presque rien à voir avec les nombres premiers. Une fois qu’on sait cela, il devient beaucoup plus facile de comprendre l’origine de nombreux motifs. Cela reste malgré tout une visualisation vraiment fascinante.
L’explication diffère un peu du code lié. Ce n’est pas que le N-ième paquet soit rempli d’entiers espacés de N, mais plutôt que chaque paquet de la N-ième ligne contient des entiers espacés de N. Par exemple, le premier paquet de la deuxième ligne est {101, 103, 105, ..., 299}, et le deuxième paquet est {102, 104, 106, ..., 300}. En comprenant ce principe, les motifs s’expliquent très bien dans ce commentaire.
Cette idée m’a pas mal absorbé. Au début, je pensais qu’on pourrait facilement faire le lien avec la spirale d’Ulam, mais ce terrier de lapin mène plutôt vers les résidus polynomiaux et la mystérieuse « Conjecture F » (explication). Les parallax primes sont expliqués plus en détail à ce lien, avec du contexte utile, et j’ai trouvé particulièrement satisfaisante l’interprétation géométrique donnée sur cette page.
J’ai joué avec cette idée de cette manière : exemple. J’ai constaté que si on ne répète que les paquets pairs ou impairs, le motif converge réellement. C’est vraiment étonnant.
Je voudrais aussi suggérer d’essayer de tracer une spirale d’Ulam Ulam spiral wiki. Et si c’était l’état initial du Game of Life de Conway, je me demande vraiment si des motifs intéressants évolueraient. En lançant en brute-force des grilles de départ de différentes tailles, on pourrait sans doute sélectionner des configurations qui tiennent plus de quelques étapes, puis les observer à la main. Si jamais une petite grille ou spirale particulière de nombres premiers produisait quelque chose de spécial, HN pourrait bien s’enflammer.
Ce n’est pas exactement la même chose, mais j’ai un générateur de spirale d’Ulam que j’avais fait il y a plus de dix ans. Lien. Celui-ci ne trace pas seulement les nombres premiers : la taille des points dépend aussi du nombre de diviseurs pairs du nombre à chaque position.
Un vote de plus pour la spirale d’Ulam. Au début, je me demandais pourquoi on ne voyait pas de diagonales. Je m’attendais à une spirale d’Ulam.
Un autre outil de spirale d’Ulam
Mon intuition sur les nombres premiers, c’est qu’ils deviennent très vite rares, mais en réalité il y en a énormément.
Les nombres premiers deviennent bien de plus en plus difficiles à trouver. Par exemple, si on les trace tous sur une seule ligne, on voit clairement la différence (voir ici). Le célèbre théorème des nombres premiers en théorie des nombres traite précisément de cela. Le nombre de nombres premiers inférieurs ou égaux à n est approximativement n/log n, et la densité des nombres premiers autour de n tend vers 1/log n. Vous pouvez aussi consulter mon explication du théorème des nombres premiers et Wikipédia.
Il y a eu énormément de recherches sur ce sujet Wikipédia
La plupart des gens le pensent. À mon avis, c’est parce qu’on apprend que trouver des nombres premiers est difficile. En réalité, trouver des nombres premiers n’est pas difficile. C’est juste que nous avons l’impression qu’il est difficile de déterminer si un entier est premier. En fait, il y a plus de nombres premiers que de carrés parfaits.
Quand la valeur de cols (colonnes) est un nombre premier, les motifs ressortent joliment.
Quand columns vaut un nombre premier p, les nombres de chaque colonne ont tous le même reste modulo p. Les multiples de p cessent donc d’être premiers, ce qui crée des motifs diagonaux.
Plus que le fait que le nombre de colonnes soit premier, on obtient aussi des motifs intéressants quand cols+1 ou cols-1 a beaucoup de diviseurs (par exemple 25, 91, 119). Le fait que des nombres proches d’un nombre premier aient beaucoup de diviseurs est aussi intéressant.
Quand il y a 7 colonnes, on voit beaucoup de diagonales allant du coin supérieur droit vers le coin inférieur gauche, et avec 5 colonnes, du coin supérieur gauche vers le coin inférieur droit. Je me demande aussi quelle est la fréquence des sexy primes consécutifs. J’aimerais savoir si ce motif se casse pour de grands nombres.
Les motifs quand
cols % 30 == 0(30, 60, 90, 120, etc.) sont vraiment fascinants. Les lignes verticales droites sont très nettes. Si on ajoute ou enlève 1 (119 ou 121), on a l’impression que les lignes « tournent » vers la gauche ou vers la droite. C’est un outil de visualisation vraiment génial.La plupart des motifs visibles ne sont en réalité pas des propriétés des nombres premiers. Si on affichait seulement les nombres non divisibles par les 100 premiers entiers naturels, on obtiendrait presque la même image.
J’ai moi aussi créé récemment un outil de visualisation des nombres premiers :
https://ilmenit.github.io/prime-fold/
Ce n’est pas seulement un outil de visualisation, mais aussi un outil qui utilise des algorithmes évolutionnaires et une fitness function pour trouver des fonctions mathématiques qui génèrent des nombres premiers ou en contiennent.
Mode PrimeFold (embedding 2D) : on saisit ou fait évoluer deux fonctions, f_x(n) et f_y(n), pour mapper les nombres vers des coordonnées 2D. Les nombres premiers et composés sont visualisés différemment. Exemple : f_x(n) = n, f_y(n) = n^2.
Mode PrimeGen (génération 1D) : on saisit ou fait évoluer une seule fonction f(n) pour produire une séquence de nombres. L’outil visualise si chaque valeur de sortie est première et combien de nombres premiers distincts sont générés. Exemple : f(n) = 2*n + 1
Avec les réglages 1, 7, 100, on a l’impression de regarder un ticker d’étoiles façon chevrons de Stargate :D
Sur ce lien, si on dézoome puis qu’on augmente et diminue la valeur de cols une par une, on peut observer l’évolution des motifs. Les variations de -7 à +5 sont impressionnantes. C’est pareil pour #1-200-420.
Pour m’occuper, j’ai comparé en Python le chiffre des unités (en base 10) de nombres premiers consécutifs et j’ai trouvé une relation intéressante. En excluant 2 et 5, qui n’apparaissent qu’une fois, j’ai compté la fréquence des transitions entre chiffres, comme 1->3, 1->5, etc. Comme je pensais que les nombres premiers étaient aléatoires, je m’attendais à des fréquences presque égales, mais il y avait au contraire des différences statistiquement significatives. Personne ne sait encore vraiment pourquoi.
Mon intuition me disait que les nombres premiers étaient bien plus rares et que leur taux de diminution s’accélérait beaucoup avec la taille des nombres, mais en réalité ils restent très nombreux. Même dans [1, 10,000, 10,000], le bas reste assez dense. Bien sûr, cela devient moins dense. L’écart moyen entre nombres premiers est
log(n)(prime number theorem).