• Aucun résultat trouvé

L’aire par les suites géométriques

2.2 Les prolongations

2.3.2. L’aire par les suites géométriques

2.3.2. L’aire par les suites géométriques

En additionnant toutes les aires décrites ci-avant, on a : aire=

somme des termes d’une suite géométrique de raison 49

1CCCC

[1] Honclaire B. et Noël-Roch Y., Géométrie de la tortue. Losanges, 32, pp. 44–52. 2016.

Programmation Ruby

Chapitre 7

Les nombres premiers, une aubaine pour l’algorithmique

Résumé. 2, 3, 5, 7, 11, 13, . . . banal, des nombres premiers, arithmétique élémentaire, exacte-ment deux diviseurs, . . ., mais il y a aussi 1 066 818 132 668 207, . . ., et aussi 274207281 1, nombre de 22 338 618 chiffres . . . on est loin, très loin, d’avoir tout exploré. Voici une toute pe-tite incursion dans le monde fascinant des nombres premiers, éclairée par quelques algorithmes en langage Ruby.

Jumeaux, cousins, sexys, nombres de Mersenne, . . ., il y en a pour tous les goûts ; conjectures de Goldbach, de Proth-Gilbreath, . . ., il y a encore beaucoup de résultats à démontrer ; des tests de primalité pour lesquels un super ordinateur ne suffit plus, il en faut des milliers, . . .

Marek WOLF, physicien polonais, né en 1956, « . . . en regardant les nombres premiers, on a l’impression d’être en présence d’un des secrets inexplicables de la création . . . ni théorèmes, ni preuves, seulement des résultats d’ordinateurs, des conjectures . . .»

Cet article est extrait de l’exposé fait au congrès de la SBPMef à Gembloux, en août 2016.

1

1 Il faut bien commencer par le commencement

Depuis l’Antiquité, les nombres premiers font couler beaucoup d’encre ; des mathématiciens célèbres s’y sont frottés : Platon, Aristote, Euclide, Ératosthène, Nicomaque, Dio-phante, Fibonacci, Mersenne, Fermat, Pascal, Goldbach, Euler, Bézout, La-grange, Wilson, Legendre, Gauss, Dirichlet, Tchebychev, Riemann, Lucas, Ha-damard, de la Vallée Poussin, . . . pour n’en citer que quelques-uns, mais ils sont encore nombreux, et moins connus, ceux qui s’y intéressent toujours, notamment avec les progrès de l’informatique.

Les deux définitions de base

a2N etb2N0:b est diviseur dea, 9k2N:a=k·b

,le reste de la division dea par b est nul (notation :a mod b= 0)

n2N0 est premier ,n a exactement 2 diviseurs, 1 et lui-même.

Un nombre qui n’est pas premier est dit composé; 1, premier naturel non nul, n’est donc pas

premier ; 2 est le premier premier, mais le dernier premier pair ; 3 est le deuxième premier ; les jeux de mots s’arrêtent ici.

Premier algorithme, la division euclidienne

La division euclidienne n’est qu’une suite de soustractions. Comme on ne s’intéresse ici qu’au reste de la division de apar b, avec bien entendu a>b, il suffit d’ôterb de ajusqu’à ce que le

puts "le reste de la division est #{a}"

Le langage de programmation Ruby propose un opérateur arithmétique de base qui fait ce calcul, l’opérateur %.

L’instruction 1234567%12 donne 7 comme résultat, ce qui nous dispense au passage de devoir exécuter l’algorithme ci-dessus.

Une application concrète de la division euclidienne : en Belgique, les 2 derniers chiffres d’un compte bancaire ou du numéro national d’identité forment un nombre qui est le reste de la division par 97 du nombre formé des 10 premiers chiffres.

Le second, un test de primalité élémentaire, mais . . . On souhaite vérifier si un naturel n est premier :

• informatiquement parlant, on utilise la méthode dite du « drapeau » : on suppose au départ que n est premier (drapeau baissé), et on le divise par tous les naturels k tels que 26k < n; dès qu’un diviseur est trouvé (drapeau levé), on peut conclure que n est composé, et on arrête les divisions ;

• mais on peut réduire considérablement le nombre de divisions : en effet, n composé ,n=a·ba6p

• on suppose donc au départ que n est premier ; on le divise par tous les naturels k tels que26k <p

n; dès qu’un diviseur est trouvé, on peut conclure quen est composé, et on arrête les divisions.

Dans l’algorithme qui suit, la variable prem est une variable dite booléenne car elle contient soit la valeur true, soit la valeurfalse.

L’instruction if premest donc équivalente à si c’est vrai ousi c’est faux, selon le contenu de la variableprem.

n ···

prem vrai

k 2

Tant que k26n si n mod k= 0

k est diviseur de n prem f aux

# vérifier si n est premier

#

puts "#{k} est diviseur de #{n}"

prem=false

puts "#{n} n’est pas premier"

end

Mais. . . pour tester un nombre de 50 chiffres, on peut être amené à faire environ1025divisions ; mon ordinateur(1)fait environ17⇥106divisions par seconde ; il lui faudrait donc environ5⇥1017 secondes de calcul(s) ;

une année comptant 60⇥60⇥24⇥365 secondes, on est donc parti pour plus de 18 milliards d’années. . .

Le langageRuby propose une bibliothèque d’instructions relatives aux nombres premiers ; pour l’activer, exécuter l’instruction require ’prime’.

L’instruction qui permet de vérifier si un nombre est premier estnombre.prime?(attention, pas d’espace avant le point d’interrogation).

Exemple d’utilisation : 2017.prime?; la réponse retournée est true.

Cette instruction a donc le statut d’une expression booléenne, et on peut par exemple la re-trouver sous la formeif n.prime?. . .

Il est difficile de savoir quel algorithme « se cache derrière » une instruction d’un langage de programmation(2). Toujours est-il que l’instruction(2**313-1).prime?donne pour résultatfalse, tout comme l’algorithme ci-dessus, heureusement.

L’algorithme « fabrication maison » affiche par contre que 10 960 009 est diviseur de 16687398718132110018711107079449625895333629080911349765211262561111091607661 254297054391304191, ce que ne fait pas l’instruction Ruby, en tout cas pas celle-là.

Pour être honnête, il faut dire que l’algorithme « fabrication maison » fait le calcul en 4.787817 se-condes, tandis que l’instruction Ruby le fait en 2.705436 secondes.

1. MacBook Pro 2,8 GHz Core i7, 16 Go de mémoire.

2. Personnellement je n’ai pas trouvé, mais peut-être n’ai-je pas cherché assez longtemps. . .

2

2 Y-a-t-il beaucoup de nombres premiers ?

Les Grecs (de l’Antiquité) ont donné une preuve qu’il y en a une infinité; on trouve trace de cette affirmation dans les Éléments d’Euclide.

Il y en a une infinité, mais lorsqu’on les cherche sur l’axe des réels (positifs), on en trouve de moins en moins !

La clé de répartition des nombres premiers serait la répartition des zéros non triviaux de la fonction zêta de Riemann, célèbre conjecture non démontrée à l’heure actuelle (l’un des sept problèmes du millénaire, doté d’un prix de 1 million de dollars(3)).

Des déserts sans nombres premiers

Il est facile d’observer des intervalles aussi grands que l’on veut, et ne contenant aucun nombre premier :

1 + 1000! n’est pas premier (6563 est diviseur ; il suffit de lui appliquer l’algorithme précédent, ou l’instruction Ruby).

2 + 1000! = 2·(1 + 3·4·5·. . .999·1000) n’est pas premier non plus, 2 est diviseur 3 + 1000! = 3·(1 + 2·4·5·. . .999·1000) non plus, 3 est diviseur

999 + 1000! = 999·(1 + 2·3·4·. . .998·1000) non plus, 999 est diviseur 1000 + 1000! = 1000·(1 + 2·3·4·. . .998·999) non plus, 1000 est diviseur ) l’intervalle 

1 + 1000!,1000 + 1000! ne contient donc aucun nombre premier.

Je ne sais pas si1 + 10999!est un nombre premier, mais l’intervalle 1 + 10999!,10999+ 10999! , de longueur 10999 1, n’en contient pas. Plus on va loin, plus il y a d’espaces de plus en plus grands sans nombres premiers. . . en se fiant à nos yeux, il est difficile de croire qu’il y en a une infinité !

3

3 La chasse aux grands nombres premiers

Ici on joue dans la cour des grands, là où les algorithmes et l’ordinateur de monsieur(4) Tout-lemonde ne suffisent plus.

Dans un journal du lundi 25 janvier 2016, on pouvait lire « 274207281 1 est premier !». Ce

« mammouth des maths » est le plus grand nombre premier deMersenne connu à ce jour, il compte plus de 22 millions de chiffres. Pour se donner une petite idée, cela représente environ 16 années de Losangesoù l’on n’imprimerait que 72 pages de 4800 chiffres(5).

C’est un nombre dit « deMersenne», religieux français et mathématicien du XVIesiècle. Les nombres de Mersenne sont les nombres de la forme Mp= 2p 1; quelques-uns sont premiers (probablement 49 connus à ce jour).

3. À vos crayons et calculettes. . . 4. ou madame

5. Cool pour le comité de rédaction.

Mn premier )n premier: si n=pq, alors2pq 1 est divisible par 2p 1 et par 2q 1, mais n premier ;Mn premier: 237 1 = 223⇥616318177.

Les nombres de Mersenne sont une « usine à fabriquer des grands nombres premiers », pas beaucoup de concurrence, ni chômage, mais la production est très limitée !

Sur le site www.mersenne.org, on peut s’inscrire au projet GIMPS : the Great Internet Mersenne Prime Search, projet collaboratif qui utilise les capacités de calcul de votre ordi-nateur à ses moments perdus. On y trouve aussi la liste chronologique des records, dont voici un extrait (année de la découverte, auteur(s) de la découverte, n°d’ordre) :

• 1772, Euler, le 8e,M31

• 1998, RolandClarkson, le 37e, M3021377

• 1999, NayanHajratwala, le 38e,M6972593

• 2001, Michael Cameron, le 39e, M13466917

• 2003, Michael Shafer, le 40e, M20996011

• 2004, Josh Findley, le 41e, M24036583

• 2005, Dr. Martin Nowak, le 42e, M25964951

• 2005, Curtis Cooperet Steven Boone, le 43e, M30402457

• 2006, Curtis Cooperet Steven Boone, le 44e, M32582657

• 2008, Hans-Michael Elvenich, le 45e, M37156667

• 2009, Odd Magnar Strindmo, le 46e, M42643801

• 2008, Edson Smith, le 47e,M43112609

• 2013, Curtis Cooper, le 48e, M57885161

• 2016, CurtisCurtis Cooper, le 49e,M74207281le dernier connu à ce jour (07/01/2016).

À partir du 46e, le classement est encore provisoire, tous les « candidats » n’ayant pas encore été éliminés.

Le langage Ruby peut calculer et afficher le 38enombre de Mersenne, M6972593, en quelques secondes, le résultat est un document de 778 pages au format A4. J’ai essayé le suivant, mais après un temps d’attente qui semble interminable, on ne sait pas si l’ordinateur est bloqué, ou s’il faut attendre encore.

Bien évidemment, il y a des (grands) nombres premiers autres que les nombres deMersenne, il « suffit » de les chercher. . .

Citons, à tout hasard,3756801695685⇥2666669 1,208003! 1,1098133# 1(voirfonction primorielle page 82), etc.

Si vous avez l’occasion de les placer dans une conversation, . . .

D’autres tests de primalité

À côté du test élémentaire, dont on a expliqué les limites, il y en a d’autres, bien plus complexes, qui dépassent le cadre de cet article ; on peut citer, entre autres :

• le test de Miller-Rabin;

• le test de Solovay-Strassen;

• . . .

Le test de Lucas-Lehmer

Le nom vient des mathématiciens qui l’ont mis au point : Edouard Lucas (1842–1891), ma-thématicien français et Derrick Lehmer (1905–1991), mathématicien américain. Il est facile à programmer, mais ne convient qu’à des nombres de Mersenne Mp « petits », car le nombre Mp doit être généré p fois dans l’algorithme.

Mp= 2p 1 est premier, Mp divise sp

4 Comment engendrer des nombres premiers ?