TP Maple 7 Arithmétique dans Z L’Arithmétique (des entiers et des polynômes) est à la base de nombreuses applications en cryptographie. Nous commencerons par exposé les commandes usuelles de Maple avant de revenir sur les algorithmes fondamentaux de l’arithmétique dans Z (Euclide, Euclide étendu, etc.) et de les traduire en procédures. Une excellente référence pour cette seconde partie du TP est le Cours d’Algèbre (primalité, divisibilité, codes) de Michel Demazure paru aux éditions Cassini. 1 2 Principales commandes d’arithmétique . . . . . . . . . . . Les algorithmes fondamentaux de l’arithmétique . . 2.1 La division euclidienne . . . . . . . . . . . . . . . . . . . . . 2.2 Les algorithmes d’Euclide . . . . . . . . . . . . . . . . . . 2.3 L’écriture en base b des entiers naturels . . . . . 2.4 Le calcul rapide des puissances . . . . . . . . . . . . . 1 4 4 4 6 8 1. Principales commandes d’arithmétique Maple peut manipuler des nombres comportant un très grand nombre de chiffres mais néanmoins limité. Le nombre maximal de chiffres, maxdigits, dépend du matétiel utilisé. On y aura accès par la commande kernelopts(maxdigits). > kernelopts(maxdigits); 268435448 Voici un aperçu des différentes opérations possibles sur les nombres entiers : Ï La fonction factorielle : pour tout n ∈ N, n! se calcule au moyen de la commande factorial ou à l’aide du symbole !. > factorial(12), 12!; 479001600, 479001600 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 Ï Division euclidienne : rappelons rapidement le principe de la division euclidienne : pour tous entiers naturels n et m 6= 0, il existe un unique couple d’entiers naturels (q, r ) vérifiant n = mq + r et 0 É |r | < |m|. On dit que q et r sont respectivement le quotient et le reste dans la division euclidienne de n par m. On utilise les commandes irem et iquo pour calculer le reste et le quotient de la division euclidienne 1. > irem(23,3); 2 > irem(-3,2); −1 > -3 mod 2; 1 > iquo(23,3); 7 Ï Test de primalité : la fonction isprime permet de tester si un entier est premier 2 ou non. > isprime(23); true Ï Décomposition en produit de facteurs premiers 3 : la fonction ifactor calcule la décomposition en produit de facteur(s) premier(s) d’un entier donné. > ifactor(561); (3)(11)(17) On a donc 561 = 3 × 11 × 17. 1. irem et iquo sont les abréviations respectives de integer remainder et integer quotient. 2. Un nombre entier est dit premier s’il est ditinct de 1 et si ses seuls diviseurs sont 1 et lui-même. 3. Il s’agit du théorème fondamental de l’Arithmétique : tout nombre entier distinct de 1 se décompose en produit de facteurs premiers. http://lkcz.free.fr 2 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 On rappelle rapidement les principales fonctions arithmétiques offertes par Maple. Arithmétique élémentaire sous Maple Ï irem(n,m) : renvoie un reste de n dans la division euclidienne par m. Ï iquo(n,m) : renvoie un quotient de n dans la division euclidienne par m. Ï igcd(n,m) : renvoie pgcd(n, m). Ï igcdex(a,b,’u’,’v’) : affecte aux variables u et v deux entiers relatifs vérifiant a ∧ b = u · a + v · b. Ï ilcm(n,m) : renvoie ppcm(n, m). Ï ithprime(n) : renvoie le n-ième nombre premier. Ï isprime(n) : renvoie true si n est premier, false sinon. Ï ifactor(n) : renvoie la décomposition en produit de facteur(s) premier(s) de n. Exercice 1. On note ( 3 X ¯ S 3 (Z) = x ∈ Z ¯ ∃(x1 , x2 , x3 ) ∈ Z3 , x = xk2 k =1 ) 1. Ecrire un programme renvoyant la liste des 15 plus petits éléments (au sens de la relation d’ordre É) de S 3 (Z). En déduire que S 3 (Z) n’est pas stable par le produit. 2. Soit a, b, c et d quatre entiers relatifs tels que a2 + b2 + c 2 + d 2 ≡ 0 [ 8 ] Vérifier qu’ils sont tous pairs. 3. Soit n un entier tel que n ≡ −1 [ 8 ]. Montrer que n 6∈ S 3 (Z). http://lkcz.free.fr 3 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 2. Les algorithmes fondamentaux de l’arithmétique Cette partie expose les algorithmes élémentaires de l’arithmétique. On n’utilisera pas les commandes de Maple telles que igcd, irem, iquo, etc. Le principe est de redéfinir ces procédures au moyen des algorithmes. 2.1. La division euclidienne Rappelons le théorème de la division euclidienne : La division euclidienne dans N Soient a et b deux entiers naturels tels que 0 < b. Il existe un unique couple d’entiers naturels (q, r ) tel que a = b · q + r et 0 É r < b appelés respectivement quotient et reste dans la division euclidienne de a par b. On dit aussi que r et q sont respectivement le reste et le quotient de a modulo b. L’algorithme de la division euclidienne de a par b le plus élémentaire est fondé sur des soustractions successives de b au nombre a. Algorithme de la division euclidienne ½ r ←a Initialisation q ←0 ½ r ← r −b Tant que r Ê b faire q ← q +1 Renvoyer q et r . A la sortie de la boucle Tant que, les entiers q et r sont respectivement égaux au quotient et au reste dans la division euclidienne de a par b. Exercice 2. Division euclidienne Ecrire une procédure DivEuclide(a,b) d’arguments a ∈ N et b ∈ N∗ renvoyant sous forme d’une liste [q, r ] le quotient et le reste dans la division euclidienne de a par b. 2.2. Les algorithmes d’Euclide L’algorithme d’Euclide de calcul du pgcd de deux entiers naturels a et b est fondé sur la division euclidienne. On notera a ∧ b le pgcd des entiers a et b. En voici le principe : On note r 0 = a et r 1 = b. Si b = 0, r 0 ∧ r 1 = a. Sinons, on effectue en cascade des divisions euclidiennes : http://lkcz.free.fr 4 TP Maple 7 — Arithmétique dans Z r0 r1 .. . ri .. . r n0 −2 Lycée Janson-de-Sailly MPSI4 2010 - 2011 = = .. . r 1 · q2 + r 2 r 2 · q3 + r 3 .. . où où .. . = r i +1 · q i +2 + r i +2 où .. .. .. . . . = r n0 −1 · q n0 + r n0 où r2 < r1 r3 < r2 < r1 .. . 0 < r i +2 < r i +1 < r i < · · · < r 1 .. . 0 = r n0 < r n0 −1 < · · · < r 2 < r 1 Le processus s’arrête car les restes r i forment une séquence strictement décroissante d’entiers naturels : il existe n 0 ∈ N tel que r n0 = 0. Venons-en à la remarque fondamentale : pour tout 0 É i É n 0 −2, l’ensemble des diviseurs de r i et r i +1 étant égal à l’ensemble des diviseurs de r i +1 et r i +2 , on a a ∧ b = r 0 ∧r 1 = r 1 ∧ r 2 = · · · = r n0 −1 ∧ r n0 = r n0 −1 On retiendra que le pgcd de a et b est égal au dernier reste non nul dans l’algorithme d’Euclide. Algorithme d’Euclide ½ r0 = a Initialisation : r1 = b x ← r0 Tant que r 1 6= 0 faire r 0 ← r 1 r 1 ← reste dans la division euclidienne de x par r 0 Renvoyer r 0 Algorithme d’Euclide Exercice 3. Ecrire une procédure Euclide(a,b) d’arguments a et b dans N et renvoyant a ∧ b par l’algorithme d’Euclide. Une variante de cet algorithme permet, au-delà du calcul du pgcd d de a et b, d’obtenir les coefficients (u, v ) dans Z d’une relation de Bezout : u ·a +v ·b = d En voici le principe en reprenant les notations précédentes. On prouve par une récurrence facile que, pour tout 0 É n É n 0 , il existe (u n , v n ) ∈ Z2 tel que r n = un · a + v n · b En effet si cette propriété est vérifiée pour tout k É n, on a ½ r n = un · a + v n · b et r n+2 = r n − q n+2 · r n+1 r n+1 = u n+1 · a + v n+1 · b ainsi http://lkcz.free.fr 5 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 r n+2 = r n − q n+2 · r n+1 = u n · a + v n · b − q n+2 · (u n+1 · a + v n+1 · b) ¡ ¢ ¡ ¢ = u n − q n+2 · u n+1 · a + v n − q n+2 · v n+1 · b On peut donc définir une telle séquence de couple par les relations de récurrence suivantes : u0 = 1 ½ v0 = 0 u n+2 = u n − q n+2 · u n+1 , ∀0 É n É n 0 − 2, u =0 v n+2 = v n − q n+2 · v n+1 1 v1 = 1 Le couple recherché est (u n0 −1 , v n0 −1 ) puisque a ∧ b = r n0 −1 = u n0 −1 · a + v n0 −1 · b Cet algorithme est appelé algorithme d’Euclide étendu : Algorithme d’Euclide étendu ½ ½ ½ r0 ← a u0 ← 1 v0 ← 0 Initialisation : , , r 1 ←b u1 ← 1 v1 ← 1 x ← r0 r0 ← r1 r 1 ← reste de x modulo r 0 y ← u0 Tant que r 1 6= 0 faire u 0 ← u 1 u 1 ← y − u 0 × quotient de x modulo r 0 y ← v0 v0 ← v1 v 1 ← y − u 0 × reste de x modulo r 0 Renvoyer (u 0 , v 0 ) Algorithme d’Euclide étendu Exercice 4. Ecrire une procédure EuclideEtendu(a,b) d’arguments a et b dans N et renvoyant un couple (u, v ) ∈ Z2 tel que a ∧ b = u · a + v · b. 2.3. L’écriture en base b des entiers naturels Soit b ∈ N \ {0, 1}. Tout entier naturel n peut s’écrire de manière unique sous la forme n = cm · b m + cm−1 · b m−1 + · · · + c1 · b + c0 où les ck valent {0, 1, · · · , b − 1} avec cm 6= 0. Cette expression est appelée écriture de n en base b ; les ck sont les chiffres de n en base b. Dans le cas particulier où b = 10, on retrouve l’écriture décimale usuelle des entiers : c0 est le chiffre des unités de n, c1 celui des dizaines, etc. Dans le cas d’une base b quelconque, on notera de manière condensée n = ( cm cm−1 · · · c1 c0 )b . http://lkcz.free.fr 6 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 Rappelons la preuve de ce résultat de numération. Elle est intéressante car constructive, c’està-dire qu’on en déduit un algorithme explicite de calcul des chiffres de n en base b. L’idée repose sur l’égalité suivante : µ³³ ¶ ´ ¡ ¢ ´ n= · · · (cm ) × b + cm−1 · · · × b + c2 × b + c1 × b + c0 Le couple quotient-reste dans la division euclidienne de n par b est de la forme (q 0 , c0 ), le couple quotient-reste dans la division euclidienne de q 0 par b est de la forme (q 1 , c1 ) et ainsi de suite. Ceci nous éclaire et nous allons considérer la suite de couples (q p , c p ) définie par : ¡ ¢ = quotient de n modulo b, reste de n modulo b (q 0 , c0 ) ¡ ¢ (q i +1 , ci +1 ) = quotient de q i modulo b, reste de q i modulo b pour tout i ∈ N Comme 0 É q i +1 < q i ou q i = q i +1 = 0 pour tout entier naturel 4 i , la suite (q i )i Ê0 est nulle à partir d’un certain rang i 0 . En notant m le plus petit entier m vérifiant cette propriété, on a donc que ci = 0 pour tout i Ê m + 1 et cm = q m · b + cm = q m−1 =6= 0. On prouve alors par une récurrence facile que i X ∀i ∈ N, n = q i · b i +1 + ck · b k k =0 d’où, en particulier, pour i = m, n= m X ck · b k k =0 Le cas de la base b = 2 est particulièrement car c’est sous cette forme que la plupart des ordinateurs manipulent les nombres entiers. Algorithme de calcul de l’écriture en base b d’un entier naturel q 0 ← quotient de n modulo b Intialisation : c0 ← reste de n modulo b L ← liste à un seul élément c0 x ← q0 q 0 ← quotient de x modulo b Tant que q 0 6= 0 faire c ← reste de x modulo b 0 insérer c0 au début de la liste L Renvoyer L Exercice 5. Ecrire une procédure EcritureBinaire(n) prenant en argument l’entier naturel n et renvoyant la liste [cm , . . . , c1 , c0 ] de ses chiffres en base 2. 4. En effet, q i = q i +1 · b + c i +1 avec b et c i +1 positifs implique q i +1 É q i . D’autre part, l’égalité q i +1 = q i équivaut à (1 − b) · q i = c i +1 et puisque les deux membres sont de signes opposés, ils sont nuls ; on en déduit que qi = 0 car b 6= 1. http://lkcz.free.fr 7 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 2.4. Le calcul rapide des puissances Commençons par un exemple élémentaire, le calcul de 46 . On peut commencer par une méthode naïve d’élévation à la puissance 6 : 42 = 4 × 4 = 16 43 = 42 × 4 = 16 × 4 = 64 44 = 43 × 4 = 64 × 4 = 256 45 = 44 × 4 = 256 × 4 = 1024 46 = 45 × 4 = 1024 × 4 = 4096 On a effectué au total 5 multiplications. On peut améliorer ce calcul de la manière suivante : 42 = 4 × 4 = 16 44 = 42 × 42 = 16 × 16 = 256 46 = 44 × 42 = 1024 × 4 = 4096 Cette séquence est plus efficace car ne nécessite que 3 multiplications. En réfléchissant un peu, on s’aperçoit qu’elle repose sur l’écriture en base 2 de 6. On a 6 = (110)2 et 2 46 = 42 +2 ¡ ¢22 ¡ ¢21 ¡ ¢20 = 41 × 41 × 40 De même, pour 9 = (1001)2, on a effectivement ¡ ¢23 ¡ ¢22 ¡ ¢21 ¡ ¢20 49 = 41 × 40 × 40 × 41 Plus généralement, si n = (n p · · · n 0 )2 , on a clairement ¡ ¢2p ¡ n ¢2p−1 ¡ ¢20 4n = 4n p × 4 p−1 × · · · × 4n 0 = õµ ³¡ · · · 1 × 4n p ¢2 × 4np−1 ´2 ··· ¶2 × 4n 2 ¶2 × 4n 1 !2 × 4n 0 Au total, on dénombre 2p multiplications avec cette méthode. On en déduit un calcul de proche en proche de 4n selon le principe suivant : ½ z0 = 1 z i +1 = z i2 · 4np−i pour tout 0 É i É p Exercice 6. Ecrire une procédure PuissancesRapides1(a,n) calculant a n par cette méthode (avec n ∈ N et a ∈ C). On utilisera la procédure EcritureBinaire(n) précédemment programmée. http://lkcz.free.fr 8 TP Maple 7 — Arithmétique dans Z Lycée Janson-de-Sailly MPSI4 2010 - 2011 Cette approche peut cependant être améliorée : la connaissance de l’écriture binaire de l’entier naturel n n’est pas indispensable. On remarque simplement que si n = 1 ¡a ¢ n n/2 2 a si n est pair a = ¡ (n−1)/2 ¢2 a× a si n Ê 3 et n impair Algorithme récursif de calcul rapide des puissances si n = 1 ¡a ¢2 Pui ssance(a, n/2) si n est pair Pui ssance(a, n) ← ¡ ¢2 a × Pui ssance(a, (n − 1)/2) si n est impair et n Ê 3 Exercice 7. Algorithme de calcul rapide des puissances Ecrire une procédure PuissancesRapides2(a,n) calculant a n où n ∈ N et a ∈ C par l’algorithme de calcul rapide des puissances exposé ci-dessus. http://lkcz.free.fr 9