Adloun

L'exponentiation modulaire

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 5 — Algorithmes dichotomiques

Énoncé

En cryptographie, on calcule de grandes puissances modulaires . Écrire puissance_mod(a, n, p). Pourquoi est-il indispensable d'appliquer l'opérateur modulo à chaque étape de calcul ?

Corrigé

def puissance_mod(a: int, n: int, p: int) -> int:
    r, b, m = 1, a % p, n
    while m > 0:
        # Invariant : (r * b**m) % p == (a**n) % p
        if m % 2 == 1:
            r = (r * b) % p
        b = (b * b) % p
        m = m // 2
    return r

Si l'on attendait la fin du calcul pour appliquer le modulo, les variables stockeraient des nombres géants (par exemple, a plus de 1700 chiffres décimaux), ralentissant les multiplications et saturant la mémoire. Appliquer le modulo à chaque étape garantit que les variables manipulées restent inférieures à .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.