A combien ce nombre est-il congru modulo p ? » Anneau quotient Z/nZ des classes résiduelles modulo n |
Si a, b et p désignent des entiers relatifs on écrit a ≡ b [p] pour signifier que a - b est un multiple de p. On dit que a est congru à b modulo p. Il est souvent opportun de connaître le plus petit entier r tel que a ≡ r [p] : l'entier r est alors le reste de la division euclidienne de a par p.
Dans des exercices, il est également souvent nécessaire de connaître r tel que an ≡ r [p], n étant un entier naturel. Si a ≡ r [p], alors an ≡ rn [p]. Le programme calcule le reste r' de la division de rn par p afin de donner la congruence la plus petite.
En fait tous les résultats intermédiaires sont affichés pour les entiers k ≤ n. Si ak ≡ 1 [p], alors les restes apparaîtront périodiquement tous les k résultats suivants puisque si a ≡ r [p] et ak ≡ 1 [p], alors ak+1 = ak × a ≡ r × 1= r [p], ak+2 ≡ r2 [p], etc.
∗∗∗
Existe-t-il un n entier tel que 3n ≡ 1 [144] ? Rép.
: cliquez ici
Programme congruences en JavaScript : |
La fonction %, syntaxe a%b, retourne le reste de la division de a par b. Le programme vous demandera successivement le nombre a, le modulo p, puis n tel que an ≡ r [p]. Si vous cherchez simplement a ≡ r [p], entrez 1 pour n (valeur par défaut).
Exemple : on s'intéresse aux restes de 127n modulo 13. On entre a = 127, p = 13 et n = 12 (= 13 - 1) :
<SCRIPT
LANGUAGE=JavaScript>
function congru()
{
a$="";ok=0
a$=prompt("Donnez l'entier naturel a :",a$)
a=eval(a$)
if(a<=0||Math.floor(a)!=a)
{alert("a = "+a+" est incorrect."+"\n"+"Le programme est arrêté");return}
p$="";
p$=prompt("Donnez le modulo p :",p$)
p=eval(p$)
if(p<=1||Math.floor(p)!=p)
{alert("p = "+p+" est incorrect."+"\n"+"Le programme est arrêté");return}
n$="1";
n$=prompt("Donnez l'entier naturel n :",n$)
n=eval(n$)
if(n<=0||Math.floor(n)!=n)
{alert("n = "+n+" est incorrect."+"\n"+"Le programme est arrêté");return}
r1=a%p;rk=r1
alert(a+" est congru à "+r1+" modulo "+p)
if(n>1)
{
for (k=2;k<=n;k++)
{
rk=(rk*r1)%p;
// récurrence : a^k est congru à r1^k et
on affiche le reste de la division de rk par p
if(rk==1&&ok==0){k1=k;ok=1}
if(!confirm(a+"^"+k+" est congru à "+rk+" modulo "+p+"\n"+"Je continue ?"))
return
if(ok==1){ok++;alert("Puisque "+a+"^"+k+" est congru à 1, les mêmes
restes"+"\n"+"apparaîtront désormais périodiquement.")
}
// fin for
} // fin if
} // fin congru
</SCRIPT>
Solution de l'exercice :
Si 3n ≡ 1 [144], alors 3n - 1 est un multiple de 144. Or =3n - 1 = 3n - 1n = (3 - 1)(3n-1 + 3n-2 + ... + 3 + 1). Donc 3n-1 + 3n-2 + ... + 3 + 1 est multiple de 72, donc multiple de 3. Mais cela est faux car 3n-1 + 3n-2 + ... + 3 + 1 ≡ 1 [3]. N.B. 114 est un leurre, on aurait pu choisir 18... mais c'était trop visible.