Sauter au contenu
Logo image

Section 4.3 La méthode des carrés répétés

Calculer de grandes puissances peut être très long. Tout comme n’importe qui peut calculer \(2^2\) ou \(2^8\text{,}\) tout le monde sait comment calculer
\begin{equation*} 2^{2^{1{,}000{,}000} }\text{.} \end{equation*}
Cependant, de tels nombres sont si grands que nous ne souhaitons pas tenter les calculs ; de plus, passé un certain point les calculs ne seraient pas réalisables même si nous disposions de tous les ordinateurs du monde. Même écrire la représentation décimale d’un très grand nombre peut ne pas être raisonnable. Elle pourrait compter des milliers ou même des millions de chiffres. Cependant, si nous pouvions calculer quelque chose comme
\begin{equation*} 2^{37{,}398{,}332 } \pmod{ 46{,}389}\text{,} \end{equation*}
nous pourrions très facilement écrire le résultat puisque ce serait un nombre compris entre \(0\) et \(46{,}388\text{.}\) Si nous voulons calculer des puissances modulo \(n\) rapidement et efficacement, nous devrons être astucieux.
 1 
Les résultats de cette section ne sont nécessaires que dans le Chapitre 7
La première chose à remarquer est que tout nombre \(a\) peut s’écrire comme somme de puissances distinctes de \(2\) ; c’est-à-dire que nous pouvons écrire
\begin{equation*} a = 2^{k_1} + 2^{k_2} + \cdots + 2^{k_n}\text{,} \end{equation*}
\(k_1 \lt k_2 \lt \cdots \lt k_n\text{.}\) C’est simplement la représentation binaire de \(a\text{.}\) Par exemple, la représentation binaire de 57 est 111001, puisque nous pouvons écrire \(57 = 2^0 + 2^3 + 2^4 + 2^5\text{.}\)
Les lois des exposants fonctionnent encore dans \({\mathbb Z}_n\) ; c’est-à-dire que si \(b \equiv a^x \pmod{ n}\) et \(c \equiv a^y \pmod{ n}\text{,}\) alors \(bc \equiv a^{x+y} \pmod{ n}\text{.}\) Nous pouvons calculer \(a^{2^k} \pmod{ n}\) en \(k\) multiplications en calculant
\begin{gather*} a^{2^0} \pmod{ n}\\ a^{2^1} \pmod{ n }\\ \vdots\\ a^{2^k} \pmod{ n}\text{.} \end{gather*}
Chaque étape consiste à élever au carré le résultat obtenu à l’étape précédente, à diviser par \(n\) et à prendre le reste.

Exemple 4.3.1.

Nous allons calculer \(271^{321} \pmod{ 481}\text{.}\) Remarquons que
\begin{equation*} 321 = 2^0 +2^6 + 2^8; \end{equation*}
donc, calculer \(271^{ 321} \pmod{ 481}\) est la même chose que calculer
\begin{equation*} 271^{ 2^0 +2^6 + 2^8 } \equiv 271^{ 2^0 } \cdot 271^{2^6 } \cdot 271^{ 2^8 } \pmod{ 481}\text{.} \end{equation*}
Il suffira donc de calculer \(271^{ 2^i } \pmod{ 481}\) pour \(i = 0, 6, 8\text{.}\) Il est très facile de voir que
\begin{equation*} 271^{ 2^1} = 73{,}441 \equiv 329 \pmod{ 481}\text{.} \end{equation*}
Nous pouvons élever ce résultat au carré pour obtenir une valeur pour \(271^{ 2^2} \pmod{481}\) :
\begin{align*} 271^{ 2^2} & \equiv (271^{ 2^1})^2 \pmod{ 481}\\ & \equiv (329)^2 \pmod{481}\\ & \equiv 108{,}241 \pmod{481}\\ & \equiv 16 \pmod{481}\text{.} \end{align*}
Nous utilisons le fait que \((a^{2^n})^2 \equiv a^{2 \cdot 2^n} \equiv a^{ 2^{n+1} } \pmod{ n}\text{.}\) En continuant, nous pouvons calculer
\begin{equation*} 271^{ 2^6 } \equiv 419 \pmod{481} \end{equation*}
et
\begin{equation*} 271^{ 2^8 } \equiv 16 \pmod{481}\text{.} \end{equation*}
Par conséquent,
\begin{align*} 271^{ 321} & \equiv 271^{ 2^0 +2^6 + 2^8 } \pmod{481}\\ & \equiv 271^{ 2^0 } \cdot 271^{ 2^6 } \cdot 271^{ 2^8 } \pmod{481}\\ & \equiv 271 \cdot 419 \cdot 16 \pmod{ 481}\\ & \equiv 1{,}816{,}784 \pmod{ 481}\\ & \equiv 47 \pmod{ 481}\text{.} \end{align*}
La méthode des carrés répétés s’avérera un outil très utile lorsque nous explorerons la cryptographie RSA dans le Chapitre 7. Pour coder et décoder des messages de manière raisonnable dans ce schéma, il est nécessaire de pouvoir calculer rapidement de grandes puissances d’entiers modulo \(n\text{.}\)