27 lines
1.1 KiB
Markdown
27 lines
1.1 KiB
Markdown
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}}$
|
|
> où $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$
|
|
|
|
|