suivant: La fonction "estpremier"
monter: Calcul de AP mod N
précédent: Traduction Xcas
Table des matières
Index
Étant donné deux entiers
a
* et
n
, n
2, on veut
connaitre les différentes valeurs de
ap mod n pour
p
, c'est
à dire l'orbite de a dans (
/n
,×).
On démontre que l'orbite se termine toujours par un cycle puisque
/n
a un nombre fini d'éléments.
- Trouver l'orbite de
2p mod 24
- Écrire une fonction de a et n qui renvoie les plus petis entiers
h
0 et T > 0 vérifiant :
ah = ah+T mod n
et la liste des
ap mod n pour
p = 0..h + T - 1
- Écrire une fonction de a, et n qui représente graphiquement
ap mod n en fonction de p.
Solution
On tape :
(irem(2^
p ,24)$(p=0..10
On obtient : 1,2,4,8,16,8,16,8,16,8,16
donc h = 3 et T = 2
On utilise la commande member qui teste si un élément est dans une
liste et member renvoie soit l'indice +1, soit 0.
On peut utiliser soit un tantque soit un repeter (tantque non arrêt faire....tantque ou repeter ...jusqua arrêt) et on remarquera
le test d'arrêt. On sait qu'une affectation renvoie la valeur affectée,
donc k:=member(b,L) renvoie soit 0 soit un nombre non nul. On fait une
boucle et on s'arrete quand k:=member(b,L) est non nul.
orbite1(a,n):={
local k,h,T,p,b,L;
L:=[1];
p:=1;
b:=irem(a,n);
tantque !(k:=member(b,L)) faire
L:=append(L,b);
b:=irem(b*a,n);
p:=p+1;
ftantque;
h:=k-1;
T:=p-h;
return h,T,L;
}:;
orbite2(a,n):={
local k,h,T,p,b,L;
L:=[];
p:=0;
b:=1;
repeter
L:=append(L,b);
b:=irem(b*a,n);
p:=p+1;
jusqua (k:=member(b,L));
h:=k-1;
T:=p-h;
return h,T,L;
}:;
On dessine les points du cycle et de 2 périodes avec la couleur a ou la couleur 0 lorsque a = 7 :
dessin(a,n):={
local k,h,T,L,P,s,LT;
P:=NULL;
h,T,L:=orbite1(a,n);
s:=dim(L);
LT:=mid(L,h);
L:=concat(concat(L,LT),LT);
pour k de 0 jusque s+2*T-1 faire
P:=P,point(k,L[k]);
fpour;
si a==7 alors return affichage(P,epaisseur_point_3);fsi;
return affichage(P,a+epaisseur_point_3);
}:;
On tape : dessin(2,11)
On tape : dessin(3,11)
On tape : dessin(2,9)
On tape : dessin(3,9)
et on observe.....
On peut rappeler
- le Théorème de Fermat :si n est premier et 0 < a < n, alors :
an-1 = 1 mod n
- la Généralisation du théorème de Fermat : si a et n sont
premiers entre eux, alors si euler(n)=
(n) est l'indicatrice
d'Euler, on a :
a
(n) = 1 mod
n
On tape :
est_premier_avec(n):={
local L,a;
L:=NULL;
pour a de 1 jusque n-1 faire
si gcd(a,n)==1 alors L:=L,a; fsi;
fpour;
return L;
}:;
Puis, on tape : E:=est_premier_avec(9)
On obtient : 1,2,4,5,7,8
et on a bien : euler(9)=6=dim(E)
Une démonstration rapide de ces théorèmes :
Si a et n sont premiers entre eux, a est inversible dans
/n
,×
Soit E l'ensemble des nombres de [1..n] qui sont premiers avec n
(E:=est_premier_avec(n)) et soit Ea l'ensemble des k*a pour
k
E. Tous les éléments de Ea sont distincts et inversibles dans
/n
,×: donc
les ensembles E et Ea sont les mêmes. En faisant le produit de tous ces
éléments on obtient
k =
k = a
(n)
k,
k étant inversible dans
/n
,×
on en déduit que
a
(n) = 1.
suivant: La fonction "estpremier"
monter: Calcul de AP mod N
précédent: Traduction Xcas
Table des matières
Index
Documentation de giac écrite par Renée De Graeve