<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Oeis | Dr. Goulu</title><link>https://drgoulu.com/tags/oeis/</link><atom:link href="https://drgoulu.com/tags/oeis/index.xml" rel="self" type="application/rss+xml"/><description>Oeis</description><generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Sun, 06 Jan 2019 00:00:00 +0000</lastBuildDate><image><url>https://drgoulu.com/media/icon_hu_eee4a95885829ab2.png</url><title>Oeis</title><link>https://drgoulu.com/tags/oeis/</link></image><item><title>2019 passée au crible</title><link>https://drgoulu.com/2019/01/06/2019-passee-au-crible/</link><pubDate>Sun, 06 Jan 2019 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2019/01/06/2019-passee-au-crible/</guid><description>&lt;h2 id="2018-sur-drgoulucom"&gt;2018 sur drgoulu.com&lt;/h2&gt;
&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/2019/images/2019-acheter-en-espagne_hu_60175b22701de127.webp 320w, https://drgoulu.com/posts/2019/images/2019-acheter-en-espagne_hu_54bb03cd7bb19022.webp 480w, https://drgoulu.com/posts/2019/images/2019-acheter-en-espagne_hu_b476ca82185ed15b.webp 600w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2019/images/2019-acheter-en-espagne_hu_60175b22701de127.webp"
width="600"
height="338"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Bon, ok, j&amp;rsquo;ai été
et n&amp;rsquo;ai publié que 8 articles ici l&amp;rsquo;année passée, mais il y a tout de même eu 299'047 pages de DrGoulu.com vues en 2018, légèrement plus qu&amp;rsquo;en 2017.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;article sur l&amp;rsquo;
a été nettement plus lu (27'548) que celui sur le
 (11'457), mais la surprise vient de celui sur
(14'847) qui se place second (encore une année à puissants orages&amp;hellip;), juste avant celui sur la
(14'502). Si vous aimez ce sujet, vous allez aimer le paragraphe suivant.&lt;/p&gt;
&lt;h2 id="bonne-chance-pour-2019-"&gt;Bonne Chance pour 2019 !&lt;/h2&gt;
&lt;p&gt;Je partage
, mais la notion de
m&amp;rsquo;a plus interpellé que lui. Il faut dire que 
 est la seule suite de l&amp;rsquo;
qui contienne 2019 précédé de 1963, un nombre important pour moi. Tous deux sont non seulement des nombres chanceux, mais leurs facteurs premiers le sont aussi : 1963 = 13*151 et 2019 = 3*673, et 3,13,151 et 673 sont également chanceux  (
).&lt;/p&gt;
&lt;p&gt;En codant ces 
 je suis tombé sur les étonnantes similitudes entre ces nombres et les nombres premiers. Le rapport ne concerne pas les nombres eux-mêmes, car beaucoup de nombres chanceux sont composés (
liste les nombres à la fois heureux et premiers), mais les suites partagent de nombreuses propriétés:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;elles sont infinies&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;leur
est la même : 1 / ln(x)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;il existe une infinité de nombres (premiers ou chanceux) jumeaux&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;il existe une conjecture analogue à
: il semblerait que tout entier soit la somme de deux nombres chanceux&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ca commence à faire beaucoup de coïncidences, si bien qu&amp;rsquo;on commence à se demander si ces propriétés ne sont pas liées plutôt à la notion de
qu&amp;rsquo;à celle de nombre premier
. Car les nombres chanceux n&amp;rsquo;ont rien de vraiment particulier, si ce n&amp;rsquo;est qu&amp;rsquo;ils sont produits par un crible très semblable au fameux
.&lt;/p&gt;
&lt;p&gt;Une bonne résolution à laquelle je me suis attaqué tout de suite consiste donc à coder en Python une classe Sieve qui implante un crible mathématique généralisé. Le
, et la suite permettra d&amp;rsquo;implanter le
, voire le
si tout va bien.&lt;/p&gt;
&lt;p&gt;Voilà mes chers lecteurs, il me reste à vous souhaiter à tous une&lt;/p&gt;
&lt;p&gt;Bonne et Chanceuse Année 2019 !&lt;/p&gt;
&lt;p&gt;&amp;hellip; et profitez en bien, car la prochaine année chanceuse sera 2217 &amp;hellip;&lt;/p&gt;
&lt;h3 id="références-"&gt;Références :&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;V. Gardiner, R. Lazarus, N. Metropolis, S. Ulam (1956) :
, Mathematics Magazine, 29 (5), p. 273–280.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>A303935 , ma première suite OEIS</title><link>https://drgoulu.com/2018/06/09/a303935-ma-premiere-sequence-oeis/</link><pubDate>Sat, 09 Jun 2018 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2018/06/09/a303935-ma-premiere-sequence-oeis/</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/2018/images/euler-level2-2_hu_a1389026d67b5dfc.webp 292w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2018/images/euler-level2-2_hu_a1389026d67b5dfc.webp"
width="292"
height="322"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
Depuis le temps que je joue avec l&amp;rsquo;
 (
), ça a fini par arriver : j&amp;rsquo;ai réussi à y ajouter une nouvelle suite,  
!&lt;/p&gt;
&lt;p&gt;Tout a commencé avec le
, qui traite de la somme des factorielles des chiffres (dfs) des nombres  (
). Seuls quatre d&amp;rsquo;entre eux appelés
sont égaux à la somme des factorielles de leurs chiffres : 1, 2, 145 et 40585  (
).&lt;/p&gt;
&lt;p&gt;Quelqu&amp;rsquo;un a prouvé en 2004 &lt;/p&gt;
\[1\]&lt;p&gt; que l&amp;rsquo;application répétée de la fonction dfs atteint immanquablement un des 4 factorions ou l&amp;rsquo;une des trois seules et uniques &amp;ldquo;boucles&amp;rdquo; suivantes:&lt;/p&gt;
&lt;p&gt;169 → 363601 → 1454 → 169 871 → 45361 → 871 872 → 45362 → 872&lt;/p&gt;
&lt;p&gt;Ne restait plus qu&amp;rsquo;à compter la longueur de l&amp;rsquo;
de dfs(n), et c&amp;rsquo;est précisément ce que liste 
, qui n&amp;rsquo;était pas encore répertoriée dans l&amp;rsquo;OEIS.&lt;/p&gt;
&lt;h2 id="publier-dans-loeis-cest-du-sérieux"&gt;Publier dans l&amp;rsquo;OEIS, c&amp;rsquo;est du sérieux.&lt;/h2&gt;
&lt;p&gt;Le processus de publication dans l&amp;rsquo;OEIS est très strict, sur le modèle de certaines publications scientifiques. &amp;ldquo;The standards are those of a mathematics reference work.&amp;rdquo; comme ils le mentionnent.&lt;/p&gt;
&lt;p&gt;Après s&amp;rsquo;
 il faut préparer tout le contenu comme pour un &amp;ldquo;papier&amp;rdquo;, en citant d&amp;rsquo;autres séries liées et des publications scientifiques.  Ensuite des &amp;ldquo;reviewers&amp;rdquo; ne se privent pas de demander des précisions et clarifications, voire de corriger la ponctuation&amp;hellip; C&amp;rsquo;est vraiment strict, et ça peut prendre un mois,
 qui a nécessité 40 itérations avant publication.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai failli abandonner car l&amp;rsquo;édition de 
  m&amp;rsquo;avait plutôt fait imaginer un processus collaboratif à la Wikipédia. Puis je me suis dit que puisque &amp;ldquo;ma&amp;rdquo; suite était connue depuis quelques années mais pas publiée dans l&amp;rsquo;OEIS, mes prédécesseurs avaient du se décourager, mais qu&amp;rsquo;il fallait que quelqu&amp;rsquo;un se sacrifie, alors voilà :&lt;/p&gt;
&lt;p&gt;2, 1, 1, 16, 8, 10, 15, 32, 36, 35, 2, 2, 17, 33, 13, 10, 15, 32, 36, 35, 17, 17, 9, 37, 7, 12, 6, &amp;hellip; telle est désormais ma suite d&amp;rsquo;entiers préférée.&lt;/p&gt;
&lt;p&gt;Et une référence &amp;ldquo;peer reviewed&amp;rdquo; de plus &lt;/p&gt;
\[2\]&lt;p&gt; !&lt;/p&gt;
&lt;h2 id="et-en-python-"&gt;Et en Python ?&lt;/h2&gt;
&lt;p&gt;Le code suivant, tiré de 
 , implante les trois suites mentionnées en Python, à l&amp;rsquo;aide de la
.&lt;/p&gt;
\[python\]&lt;p&gt; def dfs(n): return sum(map(factorial,digits(n)))&lt;/p&gt;
&lt;p&gt;A061602=Sequence(0, dfs, desc=&amp;ldquo;Sum of factorials of the digits of n&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;A014080=Sequence(0,None,lambda n:dfs(n)==n)&lt;/p&gt;
&lt;p&gt;def dfcl(n): l=set() i=n while i not in l: l.add(i) i=dfs(i) return len(l)&lt;/p&gt;
&lt;p&gt;A303935=Sequence(0,dfcl) )&lt;/p&gt;
\[/python\]&lt;p&gt;Ce code est suffisant pour calculer quelques milliers de termes de A303935, mais pour résoudre le problème 74 rapidement, il faut être légèrement plus subtil&amp;hellip; Comme je ne donne pas de solutions aux Problèmes Euler, je vous laisse chercher&amp;hellip;&lt;/p&gt;
&lt;p&gt;En passant, ce problème était mon 100ème résolu, ce qui fait que je suis passé &amp;ldquo;Level 4 &amp;quot; !
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt=""
srcset="https://drgoulu.com/posts/2018/images/Dr_Goulu_hu_16796de24c6020d5.webp 200w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2018/images/Dr_Goulu_hu_16796de24c6020d5.webp"
width="200"
height="60"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="référence"&gt;Référence&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
\[altmetric doi="10.1017/S0025557200174996" float="right"\]Gupta, S. S. (2004). 88.31 Sum of the factorials of the digits of integers. The Mathematical Gazette, 88(512), 258–261.  DOI&amp;gt;
&lt;/li&gt;
&lt;li&gt;Ph. Guglielmetti, Sequence
 in &lt;em&gt;The On-Line Encyclopedia of Integer Sequences&lt;/em&gt; (2018), published electronically at 
.&lt;/li&gt;
&lt;/ol&gt;</description></item><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 calculer le 10'000'000'000'000'000'000 ème terme de la suite de Fibonacci</title><link>https://drgoulu.com/2017/04/25/comment-calculer-le-1e19-eme-terme-de-la-suite-de-fibonacci/</link><pubDate>Tue, 25 Apr 2017 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2017/04/25/comment-calculer-le-1e19-eme-terme-de-la-suite-de-fibonacci/</guid><description>&lt;p&gt;Tombé l&amp;rsquo;autre jour sur un problème idiot
mais intéressant : calculer le 1019 ème terme de la
. Idiot parce que ça ne sert à rien. Intéressant parce que ça sous-entend qu&amp;rsquo;il existe une manière de calculer le n-ième terme de cette suite définie par récurrence sans calculer tous les termes précédents. En effet, calculer les termes les uns après les autres prendrait dans les 300'000 ans à raison d&amp;rsquo;une microseconde par terme&amp;hellip;&lt;/p&gt;
&lt;h2 id="un-nombre-dor-mais-flottant"&gt;Un nombre d&amp;rsquo;or, mais flottant&lt;/h2&gt;
&lt;p&gt;Comme même les ésotéristes le savent, la suite de Fibonacci est liée au
 A partir de ce fait, Moivre, Euler et Binet ont indépendamment obtenu ce qu&amp;rsquo;on appelle aujourd&amp;rsquo;hui la
, et qui donne directement le n-ième terme de la suite:&lt;/p&gt;
&lt;p&gt;$\mathcal F_n=\frac1{\sqrt5}(\varphi^n-\varphi'^n)$, avec $ \varphi=\frac{1+\sqrt5}2$, et $ \varphi'=-\frac1\varphi$ .&lt;/p&gt;
&lt;p&gt;En pratique, le terme en $ \varphi'$ devient rapidement négligeable et il suffit de chercher l&amp;rsquo;entier le plus proche de $\frac{\varphi^n}{\sqrt5}$. Par exemple pour n=50, on peut calculer très vite $\mathcal F_{50}\approx\frac{\varphi^{50}}{\sqrt5}$ = 12586269025&lt;/p&gt;
&lt;p&gt;Mais on se heurte rapidement au problème de la précision de calcul en nombres flottants sur nos ordinateurs : $\varphi$ étant
(mais pas aussi
que $\pi$ &amp;hellip;), il faut calculer $\varphi^n$ avec au moins autant de décimales que $\mathcal F_n$ comporte de chiffres. Dès n=71 on dépasse les 53 bits de la mantisse des nombres &amp;ldquo;extended precision&amp;rdquo; et les dernières décimales des termes calculés sont faux.&lt;/p&gt;
&lt;p&gt;Dit autrement, à partir de n=70 la division $\mathcal F_n/\mathcal F_{n-1}$ donne au moins autant de décimales de $ \varphi$ que son calcul en nombres flottants&lt;/p&gt;
&lt;h2 id="la-matrice-salvatrice"&gt;La Matrice salvatrice&lt;/h2&gt;
&lt;p&gt;Pour une méthode de calcul en nombres entiers atteignant (presque) la rapidité de la formule de Binet, il faut utiliser l&amp;rsquo;idée d&amp;rsquo;un certain Brenner : écrire la récurrence de Fibonacci sous forme matricielle
. La matrice toute simple $Q=\begin{pmatrix}1&amp;1\\\\1&amp;0\end{pmatrix}$ permet d&amp;rsquo;obtenir un nouveau terme de la série de Fibonacci en la multipliant par un vecteur formé des deux termes précédents:&lt;/p&gt;
&lt;p&gt;$\begin{pmatrix}1&amp;1\\\\1&amp;0\end{pmatrix}\begin{pmatrix}\mathcal F_{n-1}\\\\\mathcal F_{n-2}\end{pmatrix}=\begin{pmatrix}\mathcal F_{n}\\\\\mathcal F_{n-1}\end{pmatrix}$&lt;/p&gt;
&lt;p&gt;En enchaînant les multiplications matricielles, on obtient le n-ième terme à partir des deux premiers (0,1) ainsi :&lt;/p&gt;
&lt;p&gt;$\begin{pmatrix}1&amp;1\\\\1&amp;0\end{pmatrix}^{n-1}\begin{pmatrix}1\\\\0\end{pmatrix}=\begin{pmatrix}\mathcal F_{n}\\\\\mathcal F_{n-1}\end{pmatrix}$&lt;/p&gt;
&lt;p&gt;En fait on retrouve les termes de la suite directement dans la matrice  $Q^n = \begin{pmatrix}\mathcal F_{n+1}&amp;\mathcal F_{n}\\\\\mathcal F_{n}&amp;\mathcal F_{n-1}\end{pmatrix}$.&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;algorithme de l&amp;rsquo;
permet d&amp;rsquo;élever la matrice Q à la puissance n en effectuant log2(n) multiplications de matrices 2x2, soit
pour n=1019. Ultra rapide, et facilement généralisable à d&amp;rsquo;autres formules de récurrence !&lt;/p&gt;
&lt;p&gt;Malheureusement, la fonction
 souffre d&amp;rsquo;une
qui empêche de l&amp;rsquo;utiliser dès n=71 car elle utilise les nombres flottants. Il m&amp;rsquo;a donc fallu la réécrire, en résolvant une petite contrainte technologique au passage.&lt;/p&gt;
&lt;h2 id="vers-les-pétaoctets-et-au-delà-"&gt;Vers les pétaoctets et au delà &amp;hellip;&lt;/h2&gt;
&lt;p&gt;Il se trouve que le 1019-ième terme de la suite de Fibonacci est trop grand pour tenir dans le plus super des ordinateurs. En effet, la longueur du n-ième terme de la suite s&amp;rsquo;obtient facilement en prenant le log (base 10)  de la formule de Binet : $\mathcal L_n=\lceil n\log{\varphi}\rceil$ , soit grosso-modo n*0.208987640249978733769272089237555416822459239918210953539&amp;hellip;&lt;/p&gt;
&lt;p&gt;Vérifions. Pour n=1000, on obtient:&lt;/p&gt;
&lt;p&gt;$\mathcal F_{1000}$=43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875 qui comporte bien pile 209 chiffres.&lt;/p&gt;
&lt;p&gt;Donc $\mathcal F_{10^{19}}$ comporte 2089876402499787337 chiffres &amp;hellip; Il faudrait 
 
octets de RAM (de préférence&amp;hellip;) pour stocker ce nombre &amp;hellip;&lt;/p&gt;
&lt;figure class="alignright" style="max-width: 500px; width: 100%;"&gt;&lt;img src="https://drgoulu.com/posts/2017/images/1nv66i_hu_7b93cc781b3ade88.webp" srcset="https://drgoulu.com/posts/2017/images/1nv66i_hu_7b93cc781b3ade88.webp 320w, https://drgoulu.com/posts/2017/images/1nv66i_hu_b71a7d5dd930ae.webp 480w, https://drgoulu.com/posts/2017/images/1nv66i_hu_8e32ab0b43c8315.webp 500w" sizes="(max-width: 640px) 100vw, 500px" alt="(mon premier meme ... désolé ...)" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" data-zoomable /&gt;&lt;figcaption&gt;(mon premier meme &amp;hellip; désolé &amp;hellip;)&lt;/figcaption&gt;&lt;/figure&gt;
&lt;h2 id="et-modulo1000000007-"&gt;Et modulo 1000000007 ?&lt;/h2&gt;
&lt;p&gt;Fort heureusement, le problème idiot avait un petit détail en prime : il fallait calculer le résultat
1000000007, et ça, ça change tout.&lt;/p&gt;
&lt;p&gt;Ce nombre est premier (pour que ça soit plus intéressant), mais surtout il est inférieur à 230, ce qui fait que la multiplication modulo 1000000007 ne nécessite que des opérations sur des 
32 bits (signés), ultra rapide.&lt;/p&gt;
&lt;p&gt;Voici donc quelques fonctions Python tirées du
 qui effectuent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le produit matriciel, optionnellement modulaire&lt;/li&gt;
&lt;li&gt;l&amp;rsquo;exponentiation rapide d&amp;rsquo;une matrice, optionnellement modulaire, et qui corrige le bug de numpy.matrix_power&lt;/li&gt;
&lt;li&gt;le calcul quasi instantané du n-ième terme de la série de Fibonacci, avec une option modulaire vivement recommandée pour de grands n&lt;/li&gt;
&lt;/ul&gt;
\[gist id="f56725fa32fbb4840c855a8309662c9d"\]&lt;p&gt;Avec ça on obtient fibonacci(int(1E19),1000000007) = 647754067 ce qui nous fait une belle jambe,  mais nous a appris pas mal de choses intéressantes, non ?&lt;/p&gt;
&lt;p&gt;Prochaine étape : trouver la
correspondante &amp;hellip;&lt;/p&gt;
&lt;h3 id="références"&gt;Références&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;
 sur StackOverflow (et
qui m&amp;rsquo;a inspiré cet article)&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;Weisstein, Eric W. &amp;ldquo;
.&amp;rdquo; From MathWorld&amp;ndash;A Wolfram Web Resource.&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-3"&gt;&lt;/span&gt;Arthur Charpentier &amp;ldquo;
, 2016 sur Freakonometrics (mention spéciale pour l&amp;rsquo;image de la spirale&amp;hellip;)&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>2017 et les triplets pythagoriciens</title><link>https://drgoulu.com/2017/01/02/2017-et-les-triplets-pythagoriciens/</link><pubDate>Mon, 02 Jan 2017 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2017/01/02/2017-et-les-triplets-pythagoriciens/</guid><description>&lt;p&gt;Au moment d&amp;rsquo;envoyer un mot à Franck à propos de son livre
, je me suis rappelé qu&amp;rsquo;il était à l&amp;rsquo;origine de 
 sur la pédagogie appliquée au théorème de Pythagore (et aussi de 
 sur la Relativité).  J&amp;rsquo;ai ainsi découvert celle des 
 sur laquelle baser mes vœux pour cette nouvelle année :&lt;/p&gt;
&lt;h2 id="bonne-et-heureuse-année--"&gt;Bonne et Heureuse Année $\sqrt{792^2+1855^2}$ !&lt;/h2&gt;
&lt;p&gt;En effet, 2017 est un &amp;ldquo;nombre hypotenuse&amp;rdquo; (
), l&amp;rsquo;hypoténuse du triangle rectangle correspondant au
(792,1855,2017). C&amp;rsquo;est même un triplet pythagoricien &amp;ldquo;primitif&amp;rdquo; car ces 3 entiers sont
, donc 2017 est un &amp;ldquo;nombre hypoténuse primitif&amp;rdquo; (
).&lt;/p&gt;
&lt;figure class="alignright" style="max-width: 312px; width: 100%;"&gt;&lt;img src="https://drgoulu.com/posts/2017/images/artmaths0202.gif" alt="(3,4,5), le premier et le plus célèbre des triplets pythagoriciens" loading="lazy" class="rounded-lg shadow-sm w-full h-auto" /&gt;&lt;figcaption&gt;(3,4,5), le premier et le plus célèbre des triplets pythagoriciens&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;Car comme on le voit dans
, il existe deux sortes de triplets pythagoriciens: les
et les composés, qui sont des multiples de triplets plus petits, par exemple (6,8,10) obtenu en doublant (3,4,5). Ca va avoir de l&amp;rsquo;importance plus bas.&lt;/p&gt;
&lt;h3 id="comment-générer-les-triplets-pythagoriciens"&gt;Comment générer les triplets pythagoriciens&lt;/h3&gt;
&lt;p&gt;Il existe plusieurs algorithmes simples pour générer des triplets pythagoriciens. Ils sont tous mauvais. Ceux qui utilisent deux boucles imbriquées voire trois sont lents, ceux qui calculent la racine carrée en nombres flottants sont imprécis, et tous sont limités par une longueur maximale des côtés recherchés. 
écrit pour résoudre 
du
 ne faisait pas exception.&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai depuis découvert l&amp;rsquo;existence d&amp;rsquo;une méthode beaucoup plus efficace, mais pas simple. Quelques millénaires après
et la
, en 1934 pour être précis, un matheux nommé Berggren a démontré que chaque triplet primitif pouvait être généré à partir de (3,4,5) en le multipliant par une combinaison de ces 3 petites matrices
:&lt;/p&gt;
&lt;p&gt;$R_1 =\begin{pmatrix} 1 &amp; -2 &amp; 2 \\\\ 2 &amp; -1 &amp; 2 \\\\ 2 &amp; -2 &amp; 3 \\\\ \end{pmatrix}$ $R_2 =\begin{pmatrix} 1 &amp; 2 &amp; 2 \\\\ 2 &amp; 1 &amp; 2 \\\\ 2 &amp; 2 &amp; 3 \\\\ \end{pmatrix}$ $R_3 =\begin{pmatrix} -1 &amp; 2 &amp; 2 \\\\ -2 &amp; 1 &amp; 2 \\\\ -2 &amp; 2 &amp; 3 \\\\ \end{pmatrix}$&lt;/p&gt;
&lt;p&gt;Un autre matheux nommé Barning ayant montré en 1963** que chaque triplet n&amp;rsquo;est ainsi produit que d&amp;rsquo;une et une seule manière
, il suffit de parcourir l&amp;rsquo;
formé en multipliant chaque nœud par chacune de ces 3 matrices pour générer l&amp;rsquo;un après l&amp;rsquo;autre tous les triplets primitifs:&lt;/p&gt;
&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/1000px-Pythagorean.tree_.svg__hu_64a74985c05164a7.webp 320w, https://drgoulu.com/posts/2017/images/1000px-Pythagorean.tree_.svg__hu_8a349dc5e68e895.webp 480w, https://drgoulu.com/posts/2017/images/1000px-Pythagorean.tree_.svg__hu_940acb0a6d182fab.webp 760w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2017/images/1000px-Pythagorean.tree_.svg__hu_64a74985c05164a7.webp"
width="760"
height="698"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Ensuite, un autre bout de code peut multiplier chaque triplet primitif par 2,3,4,&amp;hellip; pour ajouter les triplets composés et produire ainsi tous les triplets pythagoriciens l&amp;rsquo;un après l&amp;rsquo;autre. C&amp;rsquo;est ce que fait très efficacement ce
.&lt;/p&gt;
&lt;h3 id="oui-mais-dans-lordre-svp"&gt;Oui mais dans l&amp;rsquo;ordre svp&lt;/h3&gt;
&lt;p&gt;Une difficulté supplémentaire apparaît si on veut obtenir les triplets triés dans un ordre croissant, par exemple de leur hypoténuse, puis du long côté comme dans
 ou dans 
 et d&amp;rsquo;autres séries de l&amp;rsquo;OEIS. Evidemment, si on ne s&amp;rsquo;intéresse qu&amp;rsquo;aux N premiers triplets, on peut toujours les générer, et les trier ensuite. Mais si on veut chercher par exemple le plus petit triplet dont la longueur de hypoténuse est un carré ainsi que la somme des côtés*, on ne  connait a priori pas N&amp;hellip;&lt;/p&gt;
&lt;p&gt;Pour générer les triplets dans un ordre croissant, j&amp;rsquo;ai incorporé le tri aux fonctions précédentes à l&amp;rsquo;aide de
, mais je ne vais pas accentuer votre mal de cheveux annuel en vous détaillant ça ici. Pour ceux que ça intéresse,
de ma librairie Goulib dont je vous reparlerai très bientôt, et
où vous pouvez voter pour moi&amp;hellip;&lt;/p&gt;
&lt;p&gt;Mais bon, juste parce que j&amp;rsquo;en suis assez content, en testant mon code j&amp;rsquo;ai découvert une erreur dans 
 : le 20ème terme de la série est 145, pas 142. Et j&amp;rsquo;ai ainsi pu constater que l&amp;rsquo;OEIS est un bon site scientifique car il est doté d&amp;rsquo;un système rigoureux mais efficace de correction des erreurs.&lt;/p&gt;
&lt;p&gt;Pour terminer, à tous ceux qui se demandent à quoi peut bien servir tout ça, je recommande la lecture de
auquel je n&amp;rsquo;ai pas tout compris (séquelles du champagne je suppose), mais qui propose une nouvelle méthode de cryptographie basée sur les triplets pythagoriciens.&lt;/p&gt;
&lt;p&gt;Comme quoi les années passent, mais les bonnes idées restent et construisent inéluctablement un monde plus intéressant à découvrir.&lt;/p&gt;
&lt;p&gt;Mes chers lecteurs, je vous souhaite à tous l&amp;rsquo;indispensable Santé, le très important Bonheur, et l&amp;rsquo;Etonnement qu&amp;rsquo;apportent la curiosité, la découverte et la compréhension de ce monde étrange.&lt;/p&gt;
&lt;h3 id="notes"&gt;Notes:&lt;/h3&gt;
&lt;p&gt;* C&amp;rsquo;est (4565486027761, 1061652293520, 4687298610289=21650172), découvert en 1643 par
.
 (edit du 9.1.2016 :) dont je n&amp;rsquo;ai aucune idée de comment il a fait à l&amp;rsquo;époque spectaculaires, d&amp;rsquo;autant que la recherche avec le générateur proposé dans cet article prend des plombes&amp;hellip; 
vaut décidément bien mieux, et en plus indique 
 .&lt;/p&gt;
&lt;p&gt;** Excellente année aussi&amp;hellip;&lt;/p&gt;
&lt;h3 id="références"&gt;Références:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span id="ref-1"&gt;&lt;/span&gt;&lt;span class="openbook_template5"&gt;&lt;a href="http://openlibrary.org/authors/OL3958741A/Franck_Le_Vallois" title="Click to view author in Open Library" target="_blank" rel="noopener"&gt;Franck Le Vallois&lt;/a&gt; (2016). &lt;a href="http://openlibrary.org/books/OL26208349M/L'expérience_humaine" title="Click to view title in Open Library" target="_blank" rel="noopener"&gt;L'expérience humaine: Regard sur une métamorphose inachevée&lt;/a&gt;. Gouvernances.&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=L%27exp%C3%A9rience+humaine%3A+Regard+sur+une+m%C3%A9tamorphose+inachev%C3%A9e&amp;amp;rft.isbn=9782839919647&amp;amp;rft.au=Franck+Le+Vallois&amp;amp;rft.pub=Gouvernances&amp;amp;rft.date=2016"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-2"&gt;&lt;/span&gt;Berggren, &amp;ldquo;Pytagoreiska trianglar&amp;rdquo;, 1934, Tidskrift för elementär matematik, fysik och kemi, vol. 17, p. 129-139.&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-3"&gt;&lt;/span&gt;Barning, F. J. M. &amp;ldquo;Over pythagorese en bijna-pythagorese driehoeken en een generatieproces met behulp van unimodulaire matrices&amp;rdquo;, 1963 Math. Centrum Amsterdam Afd. Zuivere Wisk. ZW-011: 37, (
)&lt;/li&gt;
&lt;li&gt;&lt;span id="ref-4"&gt;&lt;/span&gt;Spezeski, W. J. &amp;ldquo;
&amp;rdquo;, 2008, Applications and Applied Mathematics: An International Journal, 3(1), 100–112. Retrieved from
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Chasse aux nombres acratopèges</title><link>https://drgoulu.com/2008/08/24/nombres-acratopeges/</link><pubDate>Sun, 24 Aug 2008 00:00:00 +0000</pubDate><guid>https://drgoulu.com/2008/08/24/nombres-acratopeges/</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/b7890bc9a5c14c872c33caa54797a9cb_hu_c8fcb952f573f5b0.webp 320w, https://drgoulu.com/posts/2008/images/b7890bc9a5c14c872c33caa54797a9cb_hu_909e01077b7962d8.webp 342w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://drgoulu.com/posts/2008/images/b7890bc9a5c14c872c33caa54797a9cb_hu_c8fcb952f573f5b0.webp"
width="342"
height="380"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
En utilisant l&amp;rsquo;
pour un article précédent, j&amp;rsquo;ai découvert qu&amp;rsquo;elle pouvait m&amp;rsquo;aider pour une vieille idée : la recherche de nombres acratopèges.&lt;/p&gt;
&lt;p&gt;Le mot &amp;ldquo;
&amp;rdquo; signifie &amp;ldquo;sans propriété particulière&amp;rdquo; et on ne le trouve plus que sur l&amp;rsquo;étiquette de quelques bouteilles d&amp;rsquo;eau faiblement minéralisée.&lt;/p&gt;
&lt;p&gt;Les nombres entiers sont soit pairs, soit impairs. Certains sont premiers, d&amp;rsquo;autres des carrés ou des cubes d&amp;rsquo;autres nombres. Au fil des siècles, les mathématiciens ont ainsi défini des centaines de propriétés particulières dont jouissent certains nombres et ont rangés les nombres en suites définissant ces propriétés:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2,3,5,7,11,13,17, 19, 23 &amp;hellip; : les nombres premiers&lt;/li&gt;
&lt;li&gt;1,2,4,8,16,32,64,128 &amp;hellip; : les puissances de deux&lt;/li&gt;
&lt;li&gt;et des centaines d&amp;rsquo;autres&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les petits nombres ont énormément de propriétés. En cherchant “1” dans l&amp;rsquo;encyclopédie, on trouve 141'541 resultats, pour “2” :  117'375,  pour “3” : 92'953, et pour “1963”, mon année de naissance :  401 …&lt;/p&gt;
&lt;p&gt;Je me suis demandé quels sont les nombres qui apparaissent le moins dans ces suites, et puisqu&amp;rsquo;ils n&amp;rsquo;ont aucune propriété particulière, méritent d&amp;rsquo;être qualifiés d&amp;rsquo;acratopèges.&lt;/p&gt;
&lt;h3 id="1548--le-nombre-de-zinzin"&gt;1548 : le nombre de Zinzin&lt;/h3&gt;
&lt;p&gt;Zinzin était un prof de maths célèbre du Collège de St-Maurice. Au début des années 80, ses cours étaient de véritables shows et je repense à lui chaque fois que je &amp;ldquo;fais Barbe Bleue&amp;rdquo;* avec une équation et chaque fois que je croise son nombre fétiche : 1548.&lt;/p&gt;
&lt;p&gt;Tous les problèmes posées par Zinzin avaient la même solution : 1548 ou une de ses variations comme 1.548, 720 (= 15x48 ) ou encore 31.6348490636206336. Etonné par ce dernier résultat, j&amp;rsquo;avais dit à Zinzin que je m&amp;rsquo;étais probablement trompé quelque part et il m&amp;rsquo;avait suggéré d&amp;rsquo;en prendre la racine 8-ième : oui c&amp;rsquo;est bien 1.54^8 &amp;hellip;&lt;/p&gt;
&lt;p&gt;Zinzin comptait ainsi : &amp;ldquo;0,1,e,pi,1548, beaucoup&amp;rdquo;. Selon lui, 0,1,e et pi suffisent à construire les mathématiques avec &amp;ldquo;Beaucoup&amp;rdquo; , qui est une notion moins perturbante que l&amp;rsquo;infini. Et 1548, était un nombre quelconque, sans propriété particulière.&lt;/p&gt;
&lt;p&gt;Une génération d&amp;rsquo;étudiants a cherché pourquoi Zinzin chérissait 1548 plus que tout autre nombre, mais il ne semblait justement pas y avoir de raison. 1548 est-il un nombre acratopège ?&lt;/p&gt;
&lt;p&gt;l&amp;rsquo;Encyclopédie des suites nous apprend que
comme :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
: Nombres n qui, élevés aux puissances de 1 à 4, sont multiples de la somme de leurs digits :
&lt;ul&gt;
&lt;li&gt;1548 = 86 x (1+5+4+8 )&lt;/li&gt;
&lt;li&gt;1548^2 = 2396304 = 88752 x (2+3+9+6+3+0+4)&lt;/li&gt;
&lt;li&gt;1548^3= 3709478592 = 68694048 x (3+7+0+9+4+7+8+5+9+2)&lt;/li&gt;
&lt;li&gt;1548^4=5742272860416 = 106338386304 x (5+7+4+2+2+7+2+8+6+0+4+1+6)&lt;/li&gt;
&lt;li&gt;(ça ne joue plus avec 1548^5&amp;hellip;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
: Plus petit nombre de pierres au
 qui utilise le (2*n-1)-ème trou&lt;/li&gt;
&lt;li&gt;et autres folies de mathématiciens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais il est vrai qu&amp;rsquo;avec 115 résultats, 1548 a peu de propriétés, nettement moins que  ses voisins 1547 (151) et que 1549 (304) par exemple. C&amp;rsquo;est un nombre que je qualifierais de &amp;ldquo;faiblement minéralisé&amp;rdquo; plutôt que d&amp;rsquo;acratopège.&lt;/p&gt;
&lt;h3 id="1729--le-nombre-de-hardy-ramanujan-et-goulu"&gt;1729 : Le nombre de Hardy-Ramanujan (et Goulu)&lt;/h3&gt;
&lt;p&gt;Sur les traces de Zinzin, je m&amp;rsquo;étais mis en tête de trouver mon propre nombre fétiche et ai choisi 1729, en raison d&amp;rsquo;une histoire légèrement brodée par le fameux Zinzin. Le mathématicien Hardy avait pris le taxi numéro 1729 pour rendre visite à
et en chemin il avait trouvé ce nombre acratopège : il lui semblait qu&amp;rsquo;il n&amp;rsquo;avait aucune particularité. Mais en arrivant, Ramanujan dit immédiatement &amp;ldquo;Non ,c&amp;rsquo;est un nombre fort intéressant ; c&amp;rsquo;est le plus petit que l&amp;rsquo;on puisse exprimer comme somme de deux cubes de deux manières différentes.&amp;rdquo; En effet, 1729 = 123 + 13 = 103 + 93&lt;/p&gt;
&lt;p&gt;Depuis, un tel nombre est appelé &amp;ldquo;
&amp;rdquo; et 1729 est le plus petit taxicab-2. Faisant confiance à l&amp;rsquo;instinct de Hardy, j&amp;rsquo;espérais donc que ce soit la seule propriété remarquable de 1729, mais hélas, il y a
qui est donc un nombre bien moins acratopège que celui de Zinzin.&lt;/p&gt;
&lt;p&gt;Seule consolation, il n&amp;rsquo;y a que
 dont
, celle des nombres dodécagonaux donnés par la formule An=n.(5n-4)&lt;/p&gt;
&lt;p&gt;(à part que A2=12, je ne vois pas le rapport avec les dodécagones, si quelqu&amp;rsquo;un peut m&amp;rsquo;éclairer&amp;hellip;)&lt;/p&gt;
&lt;h3 id="la-chasse-est-ouverte-"&gt;La chasse est ouverte !&lt;/h3&gt;
&lt;p&gt;Quel est le plus petit nombre entier qui n’apparaît dans aucune suite de l&amp;rsquo;Encyclopédie ? et ceux qui n&amp;rsquo;y apparaissent qu&amp;rsquo;une fois ?&lt;/p&gt;
&lt;p&gt;On peut répondre à ces questions facilement car le contenu de la base de données est
et qu&amp;rsquo;un petit programme vite fait en Python peut y compter le nombre d&amp;rsquo;occurrences des nombres dans les suites en quelques secondes minutes et produire une fichier lisible sous Excel&amp;hellip;. et voilà !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8795, 9935, 11147, 11446, 11612, 11630, &amp;hellip; sont les premiers nombres parfaitement acratopèges : ils ne figurent dans aucune des suites de la base ! On pourrait définir une suite &amp;ldquo;Acra0&amp;rdquo; avec ces nombres définis comme n&amp;rsquo;apparaissant que dans Acra0 &amp;hellip;&lt;/li&gt;
&lt;li&gt;8267, 9734 sont les premiers nombres de la suite Acra1. Ce sont les seuls nombres inférieurs à 10'000 qui n&amp;rsquo;ont qu&amp;rsquo;une seule propriété répertoriée :
&lt;ul&gt;
&lt;li&gt;
est un nombre tel que la juxtaposition de tous les précédents dans la suite est un nombre premier. Autrement dit le nombre (oubliez les virgules et les espaces, considérez ce qui suit comme un seul nombre entier) : 1, 3, 7, 11, 13, 29, 37, 113, 121, 149, 151, 201, 219, 251, 451, 453, 573, 669, 689, 697, 749, 913, 969, 1157, 1269, 1503, 1531, 1809, 2087, 2163, 2179, 2511, 2537, 2599, 2709, 2789, 2929, 3243, 3989, 4033, 4151, 5019, 5389, 5423, 5599, 6179, 6433, 8267 est premier &amp;hellip;&lt;/li&gt;
&lt;li&gt;
me plait particulièrement : 11 ème terme de sa suite, c&amp;rsquo;est le nombre de polyminos différents de 11 carrés dont le périmètre vaut 24, qui est le périmètre maximal de ces polyminos. C&amp;rsquo;est plus clair si on parle du
 classique : le 5ème terme de la suite dit qu&amp;rsquo;il en existe 11 dont le périmètre vaut 12. Effectivement, seul le &amp;ldquo;P&amp;rdquo; a un périmètre de 10. Wow !&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
,
,
, &amp;hellip; ont deux propriétés seulement. Ils définissent la suite Acra2&lt;/li&gt;
&lt;li&gt;
est le plus petit nombre avec 3 propriétés&lt;/li&gt;
&lt;li&gt;Acra5 commence par
&lt;/li&gt;
&lt;li&gt;Acra10 commence par
&lt;/li&gt;
&lt;li&gt;
est le plus petit nombre avec moins de 100 propriétés (88 )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voilà, vous connaissez désormais les nombres les moins utiles des mathématiques !&lt;/p&gt;</description></item></channel></rss>