Adloun

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

Le cours du chapitre · Tous les exercices du chapitre