T.P. 7 : algorithmes pour l’arithm´etique
1 Autour de l’algorithme d’Euclide
1.1 L’algorithme d’Euclide usuel
Ecrire une fonction Euclide qui re¸coit deux arguments aet bsuppos´es de type integer et renvoie
le pgcd de aet bcalcul´e par l’algorithme d’Euclide.
1.2 L’algorithme d’Euclide ´etendu
On consid`ere deux entiers positifs aet bavec a>b>0 et la suite (rk)d´efinie par r0=a,
r1=bet tant que rk≠0, rk+1est le reste de la division euclidienne de rk−1par rk. On notera
rk−1=qkrk+rk+1cette ´egalit´e de division euclidienne.
On note Nl’indice du dernier reste non nul, rN=pgcd(a, b).
a) Montrer par r´ecurrence (finie) que pour tout k∈⟦0, N ⟧, il existe (uk, vk)∈Z2tels que
rk=uka+vkb. On donnera la relation de r´ecurrence v´erifi´ee par les suites (uk)et (vk).
Indication : une illustration concr`ete.
97 =5×18 +7,
18 =2×7+4,
7=1×4+3,
4=1×3+1,
3=3×1+0.
7=1×97 −5×18,
4=−2×97 +11 ×18,
3=3×97 −16 ×18,
1=−5×97 +27 ×18.
b) Ecrire une fonction Python qui prend deux arguments a,b (suppos´es entiers non nuls avec
a>b) et qui renvoie le pgcd dde aet bet des coefficients u,v tels que au +bv=d.
2 Diviseurs et test simple de primalit´e
2.1 Diviseurs
Ecrire une fonction Python diviseurs qui prend en argument un entier positif net renvoie
la liste de ses diviseurs dans N.
2.2 Premiers
Ecrire une fonction testpremier qui prend en argument un entier positif net renvoie True si
nest un nombre premier et False sinon.
2.3 Eratosth`ene
Ecrire une fonction Erato qui prend prend en param`etre un entier positif net renvoie la liste
de tous les nombres premiers dans ⟦2, n⟧calcul´ee grˆace au crible d’Eratosthene (certains, peu, ont
d´ej`a dˆu le faire `a un TP de d´ebut d’ann´ee sur les listes...)
A l’aide du module time comparer l’efficacit´e de testpremier et de eratosthene pour tester
si disons deux nombres `a ... chiffres sont premiers ( `a vous de voir le bon ordre de grandeur).
3 Le test de Fermat
3.1 Exponentiation modulaire
Pour exp´erimenter le test de Fermat, nous commen¸cons par modifier l’algorithme d’exponen-
tiation rapide pour le faire travailler dans les anneaux de congruences (Z/nZ,+,×).
1