suivant: Écriture d'un entier comme
monter: Suite de Hamming
précédent: L'algorithme sans faire un
Table des matières
Index
hamming(n) va renvoyer les n premiers éléments de la suite de
Hamming.
L'indice j sert simplement à compter les éléments de H.
k est une suite qui contient les indices k0,k1,k2.
On peut initialiser H à [2,3,4,5] donc j à 4,
et k à [1,0,0] (car H[0]=2 a été multiplié par 2,
mais pas par 3, ni par 5) mais cela suppose n>3.
On peut aussi initialiser H à [1], k à [0,0,0]
(H[0]=1 n'a pas été multiplié par 2, ni par 3, ni par 5)
et j à 0 puis enlever 1 de H à la fin car 1
n'est pas un terme de la suite.
Voici la fonction hamming(n) écrite en Xcas pour n>3.
//pour n>3
hamming(n):={
local H,j,k,m,p,q,mi;
H:=[2,3,4,5];
j:=4;
k:=[1,0,0];
while (j<n) {
m:=2*H[k[0]];
p:=3*H[k[1]];
q:=5*H[k[2]];
mi:=min(m,p,q);
H:=append(H,mi);
j:=j+1;
if (mi==m) {k[0]:=k[0]+1};
if (mi==p) {k[1]:=k[1]+1};
if (mi==q) {k[2]:=k[2]+1};
}
return H;
}
Voici la fonction hamming(n) écrite en Xcas pour n>0.
//pour n>0
hamming(n):={
local H,j,k,m,p,q,mi;
H:=[1];
j:=0;
k:=[0,0,0];
while (j<n) {
m:=2*H[k[0]];
p:=3*H[k[1]];
q:=5*H[k[2]];
mi:=min(m,p,q);
H:=append(H,mi);
j:=j+1;
if (mi==m) {k[0]:=k[0]+1};
if (mi==p) {k[1]:=k[1]+1};
if (mi==q) {k[2]:=k[2]+1};
}
return tail(H);
}:;
On tape :
hamming(20)
On obtient :
[2,3,4,5,6,8,9,10,12,15,16,18,20,24,25,27,30,32,36,40]
Documentation de giac écrite par Renée De Graeve