next up previous contents index
suivant: Un peu de mathématiques monter: 495 et 6174 précédent: Les chiffres d'un nombre   Table des matières   Index

La fonction f

On écrit la fonction etape0 qui a 2 arguments le nombre n et le nombre de chiffres autorisés s : ainsi f(n)=etape0(n,4)
etape0(n,s):={
local ch,chA,chD,t,nA,nD;
si (n==0) return n;fsi;
ch,t:=chiffres0(n);
chA:=SortA(ch);
chD:=SortD(ch);
nA:=nombre(chA);
nD:=nombre(chD)*10^(s-t);
return nD-nA;
};

En utilisant la fonction horner de xcas au lieu de nombre, on écrit la fonction etape (f(n)=etape(n,4)) puis, on écrit la fonction test pour tester un nombre quelconque en itérant la fonction f :

chiffres(n):={
local ch,t;
ch:=string(n);
t:=size(ch);
return (asc(ch)-[seq(48,t)],t);
};
etape(n,s):={
local ch,chA,chD,t,nA,nD;
(ch,t):=chiffres(n);
chA:=SortA(ch);
chD:=SortD(ch);
nA:=horner(chA,10);
nD:=horner(chD,10)*10^(s-t);;
return nD-nA;
};
test(n,s):={
si (n==0) "0 non permis";fsi;
si (n>10^s) alors return s+" chiffres au plus";fsi;
si (irem(n,horner([seq(1,s)],10))==0) alors 
return s+" chiffres non identiques" 
fsi;
si (s==3) alors
tantque (n!=495) faire print(n);n:=etape(n,s);ftantque;
fsi;
si (s==4) alors
tantque (n!=6174) faire print(n);n:=etape(n,s);ftantque;
fsi;
return n;
};
On écrit une première "démonstration" en testant tous les nombres en ordonnant leur chiffres pour ne pas faire 103 (resp 104) tests : c'est le fait que le programme s'arrête qui prouvera que 495 (resp 6174) est un point fixe de f. On compte le nombre m d'itérations que l'on doit faire avant d'obtenir 495 (resp 6174).
Pour 495 :
demo495():={
local j,k,l,u,n,p,m,n0;
p:=0
for (j:=0;j<10;j++){
for (k:=j;k<10;k++){
for (l:=k;l<10;l++){
if (l!=j){
n:=horner([j,k,l],10);
p:=p+1;m:=0;n0:=n;
tantque (n!=495) faire  m:=m+1;n:=etape(n,3);ftantque;
print(n0,m);
}
}
}
}
return p;
}
Pour 6174
demo6174():={
local j,k,l,u,n,p,m,n0;
p:=0
for (j:=0;j<10;j++){
for (k:=j;k<10;k++){
for (l:=k;l<10;l++){
for (u:=l;u<10;u++){
if (u!=j){
n:=horner([j,k,l,u],10);
p:=p+1;m:=0;n0:=n;
tantque (n!=6174) faire  m:=m+1;n:=etape(n,4);ftantque;
print(n0,m);
}
}
}
}
}
return p;
}
On trouve que pour s = 3, on a tester p=210 nombres et pour tous ces nombres le nombre d'itérations est inférieur ou égal à 6.
On trouve que pour s = 4, on a tester p=705 nombres et pour tous ces nombres le nombre d'itérations est inférieur ou égal à 7.
On peut par exemple retrouver le nombre p=705 en comptant :
Les nombres qui ont 4 chiffres différents :
il y en a comb(10,4)=210 (choix de 4 éléments parmi 10),
Les nombres qui ont 2 chiffres égaux et 2 chiffres différents :
il y en a comb(3,1)*comb(10,3)=360 (choix de 3 éléments parmi 10 et choix de 1 parmi 3 pour savoir le chiffre qui sera répété),
Les nombres qui ont 2 fois 2 chiffres égaux :
il y en a comb(10,2)=45 (choix de 2 éléments parmi 10),
Les nombres qui ont 3 chiffres égaux :
il y en a comb(2,1)3*comb(10,2)=90 (choix de 2 éléments parmi 10 et choix de 1 parmi 2 pour savoir le chiffre qui sera répété),
Donc en tout : 210+360+45+90=705 On remarque que :
next up previous contents index
suivant: Un peu de mathématiques monter: 495 et 6174 précédent: Les chiffres d'un nombre   Table des matières   Index
Documentation de giac écrite par Renée De Graeve