OCaml (option informatique) · Chapitre 10 · Exercice de TD
Exponentiation modulaire rapide
Recherche et dichotomie · niveau 3 (difficile)
Énoncé
Écrire puissance_mod x n m calculant en , sans jamais manipuler de très grands nombres.
Corrigé
let rec puissance_mod x n m =
if n = 0 then 1 mod m
else
let p = puissance_mod x (n / 2) m in
let p2 = (p * p) mod m in
if n mod 2 = 0 then p2
else (p2 * x) mod m
Même schéma que l'exponentiation rapide, mais on réduit modulo m après chaque produit : les valeurs restent bornées par m, ce qui évite les dépassements de capacité même pour de très grands exposants. C'est le cœur des calculs en arithmétique modulaire (cryptographie). multiplications.
Exercices semblables
- Logarithme contre linéaire corrigé
- Première occurrence corrigé
- Point d'insertion corrigé
- Racine carrée entière par dichotomie corrigé
- Recherche d'un seuil monotone corrigé