cours/exponentiation rapide.md
oscar.plaisant@icloud.com a2ee0fa5ca from github to this gitea
2023-10-23 23:09:51 +02:00

1.1 KiB

up::informatique.algorithmes title:: #informatique/algorithmie #maths/arithmétique


Formalisme mathématique

Soient a et n dans \mathbb{N}\setminus \{ 0,1 \} On cherche à calculer a^{n} Avec un algorithme naïf récursif, il faut faire n multiplications pour faire ce calcul. On montre que l'on peut faire le même calcul avec au plus 2p multiplications, où p = \left\lfloor \dfrac{\ln n}{\ln 2} \right\rfloor

[!note] Démonstration de la méthode Soit (u_{k}) \in \{ 0, 1 \}^{\mathbb{N}} une suite de chiffres binaires Soit \displaystyle n = \sum\limits_{k=0}^{n}n_{k}2^{k} le nombre dont les chiffres sont ceux de (u_{k}) On a : \displaystyle a^{n} = \prod\limits_{k \in J}a^{2^{k}}J = \{ k \in [\![0; p]\!] \mid u_{k} = 1 \} avec \displaystyle p = 2 \left\lfloor \frac{\ln n}{\ln 2} \right\rfloor En utilisant a^{2^{k+1}} = \left( a^{2^{k}} \right)^{2}, il y à p élévations au carré pour calculer a^{2^{k}} (pour k \in [\![1; p]\!]). Alors, au plus p multiplications donnent a^{n}

Il reste à noter que 2^{p} \leq n < 2^{p+1} et donc p \ln 2 \leq \ln n < (p+1) \ln 2