4 Autour de la multiplication et l’exponentiation modulaire
Exercice 16 Sans calculatrice : quelle est la dernière décimale de 17 ×923 ?
Quelle est la dernière décimale de 123345678987654 ×836548971236 ?
Bien... donc finalement : pour connaître ab mod 10, on fait le produit de amod 10 par bmod 10, et
on regarde ce produit modulo 10.
On montrerait sans problème que ce résultat reste valable modulo n’importe quel entier. De même,
pour calculer abmod c, on peut faire bmultiplications par aet réduire modulo cà chaque étape.
res ←1
pour ide 1àbfaire
res ←res ×amod c
Résultat :res
Exercice 17 Expliquer l’intérêt de cette façon de procéder par rapport à la version «on calcule ab, puis
on réduit le résultat modulo c».
Calculer ainsi 123456654321 mod 1234567.
Exercice 18 Project Euler : problem 48
The series, 11+ 22+ 33+· · · + 1010 = 10405071317. Find the last ten digits of the series,
11+ 22+ 33+· · · + 10001000.
5 Pour ceux qui s’ennuient
Exercice 19 Vérifier le théorème de Wilson, pour p6104:
Un entier pest premier si et seulement si pdivise (p−1)! + 1.
Exercice 20 Pour n∈[[3,30]], déterminer le nombre de k∈[[2, n −1]] tels que k2mod n=−1(ou
encore : k2≡ −1 [n]: on parle de racine de −1modulo n).
Quel est le nombre de n∈[[3,1000]] tels que l’équation k2≡ −1 [n]possède (au moins) une solution ?
Exercice 21 Déterminer les nombres premiers pmajorés par 100 tels qu’existe a, b ∈Ntels que a2+b2=
p. Qu’observe-t-on (regarder modulo 4) ?
Beaucoup plus difficile : déterminer les entiers nmajorés par 50 tels qu’existe a, b ∈Ntels que
a2+b2=n. Qu’observe-t-on ?
Exercice 22 Très difficile
On définit une suite « de type Fibonacci » en posant f0= 1,f1=f2=· · · =f99 = 0, et fn+100 =
fn+fn+1 pour tout n∈N.
1. Que vaut f106modulo 1515 ?
2. Quelles sont les quatre dernières décimales de f1015 ?
6 Besoin d’indications ?
– Exercice 6. On calcule les valeurs du couple (fk, fk+1)pour kallant de 0à99. L’idée est que si
(fk, fk+1)=(a, b), alors au rang suivant : (fk+1, fk+2)=(b, a +b), ce qui donne un algorithme
assez simple :
(a, b)←(0,1)
pour kde 1à99 faire
# À l’entrée (a, b) = (fk−1, fk)
(a, b)←(b, a +b)# Et à la sortie (a, b)=(fk, fk+1)
Résultat :b
On trouvera f100 = 354224848179261915075 et f1000 = 434665...849228875.
4