suivant: La suite des tas
monter: Pour s'amuser avec le
précédent: La démonstration
Table des matières
Index
Soit a un entier positif. On veut étudier avec des graphiques la suite de
Syracuse définie par :
u0 = a
un = un-1/2 si un-1 est pair et
un = 3*un-1 + 1 si un-1 est impair.
Cette suite se termine toujours (?) par 1,4,2,1,4,2,1... mais on ne sait pas
le montrer.
Pour étudier cette suite on peut :
- utiliser le tableur en mettant dans A0 la valeur a de départ et
dans A1 la formule :
=ifte(irem(A0,2)==0,iquo(A0,2),3*A0+1) ou encore
=if ((irem(A0,2))==0) iquo(A0,2); else 1+3*A0;;
- utiliser un programme syracuse qui renvoie le maximum de cette suite et
le nombre d'éléments de cette suite et syracuse0 qui écrit en
plus les termes de la suite ou encore syracuse100
qui renvoie le maximum, le nombre de termes et la valeur de départ de la
plus longue suite démarrant par un nombre entre 2 et 100.
syracuse(a):={
local k,m;
k:=0;
m:=a;
while (a!=1) {
if (irem(a,2)==0) a:=iquo(a,2);
else {
a:=a*3+1;
if (a>m){m:=a};
}
k:=k+1;
}
};
syracuse0(a):={
local m,k;
m:=a;
k:=0;
print(a);
while (irem(a,2)==0){
a:=iquo(a,2);
k:=k+1;
print(a);
}
while(a!=1){
a:=3*a+1;
k:=k+1;
print(a);
if (m<a) {m:=a;}
while (irem(a,2)==0){
a:=iquo(a,2);
k:=k+1;
print(a);
}
}
return(m,k);
};
syracuse100():={
local k,kn,kt,l,lt,m,mt;
lt:=0;
for (k:=2;k<101;k:=k+1){
kn:=k;
m:=k;
l:=0;
while (kn!=1) {
if (irem(kn,2)==0) kn:=iquo(kn,2);
else {
kn:=kn*3+1;
if (m<kn) {
m:=kn;
}
}
l:=l+1;
}
if (l>lt) {
mt:=m;lt:=l;kt:=k;
}
}
return(mt,lt,kt);
};
On ouvre un éditeur de programme, on recopie la procédure, puis grâce au
bouton OK le programme est validé.
On tape syracuse100(), on trouve :
9232,118,97 ce qui veut dire que c'est en démarrant avec 97 que la
suite a le plus de termes (ici 118 termes) et le maximum de cette suite est
9232.
On peut bien sûr modifier les paramètres de la boucle for en mettant
par exemple :
for (k:=101;k<200;k:=k+1)
On tape syracuse100(), on trouve alors :
250504,124,177
ou encore :
for (k:=901;k<1000;k:=k+1)
On tape syracuse100(), on trouve alors :
250504,173,937
On peut encore modifier facilement pour savoir si un plus grand nombre de
terme donne la plus grande valeur atteinte (cela semble vrai!!!) (modifier pour
cela :
if (l>lt) {mt:=m;lt:=l;kt:=k;} en
if (m>mt) {mt:=m;lt:=l;kt:=k;} et rajouter au début kt:=2;.
- utiliser un programme qui dessine les points (n, un) lorsqu'on donne en
entrée u0 = a
- lorsqu'on donne en entrée u0 = a et en notant n la première valeur de
k pour laquelle uk = 1 et m le maximum des uk pour k
n, dessiner
les points a, m ou encore dessiner les points a, uk pour k = 0..n.
On écrit la procédure syracuse1 (resp syracuse2 qui dessine
les points (k, uk) (resp les segments reliant les points (k, uk)) dans
l'écran de géométrie et la procédure syracuse3 qui
dessine les points a, uk pour k allant de 0 à n et cela pour a allant de 2 à 100 :
syracuse1(a):={
local m,k;
m:=a;
k:=0;
point(0,a);
while (irem(a,2)==0){
a:=iquo(a,2);
k:=k+1;
point(k,a);
}
while(a!=1){
a:=3*a+1;
k:=k+1;
point(k,a);
if (m<a) {m:=a;}
while (irem(a,2)==0){
a:=iquo(a,2);
k:=k+1;
point(k,a);
}
}
return(m,k);
};
syracuse2(a):={
local m,k,k0,a0;
m:=a;
k:=0;
point(k,a);
while (irem(a,2)==0){
k0:=k;
a0:=a;
a:=iquo(a,2);
k:=k+1;
segment(k0+i*a0,k+i*a);
}
while(a!=1){
k0:=k;
a0:=a;
a:=3*a+1;
k:=k+1;
segment(k0+i*a0,k+i*a);
if (m<a) {m:=a;}
while (irem(a,2)==0){
k0:=k;
a0:=a;
a:=iquo(a,2);
k:=k+1;
segment(k0+i*a0,k+i*a);
}
}
return(m,k);
};
syracuse3():={
local k,kn;
for(k:=2;k<101;k:=k+1){
point(k,k);
kn:=k;
while (kn!=1) {
if (irem(kn,2)==0) kn:=iquo(kn,2); else kn:=kn*3+1;
point(k,kn);
}
}
};
Ne pas oubler de régler la fenêtre graphique en mettant par exemple :
X-=Y-=WX-=WY-=0, X+=WX+=100 et Y+=WY+=1000.
puis on tape par exemple syracuse1(123).
suivant: La suite des tas
monter: Pour s'amuser avec le
précédent: La démonstration
Table des matières
Index
Documentation de giac écrite par Renée De Graeve