suivant: L'algorithme sans faire un
monter: Suite de Hamming
précédent: La définition
Table des matières
Index
On écrit tous les nombres de Hamming de 0 à n>0 et on barre les
nombres qui sont de la forme
2a*3b*5c avec a, b, c variant de 0 à un
nombre tel que
2a*3b*5c
n: les nombres barrés (excepté 1)
sont les nombres de Hamming inférieurs à n>0.
Voici la fonction hamming(n) écrite en Xcas pour obtenir
les nombres de Hamming inférieurs à n>0.
hamming(n):={
local H,L,a,b,c,j,d;
L:=makelist(x->x,0,n);
//les nbres de Hamming sont 2^a*3^b*5^c
c:=0; b:=0;a:=0;
d:=1;
while (d<=n) {
while (d<=n){
while (d<=n) {
L[d]:=0;
//d:=5*d
c:=c+1;
d:=2^a*3^b*5^c;
}
c:=0;
b:=b+1;
//d:=2^a*3^b*5^c
d:=2^a*3^b;
}
//c:=0;
b:=0;
a:=a+1;
//d:=2^a*3^b*5^c
d:=2^a;
}
H:=[];
for (j:=2;j<=n;j++) {
if (L[j]==0) H:=append(H,j);
}
return H;
}
ou encore en supprimant la variable c :
hamming(n):={
local H,L,a,b,j,d;
L:=makelist(x->x,0,n);
//les nbres de Hamming sont 2^a*3^b*5^c
a:=0;
d:=1;
while (d<=n) {
b:=0;
while (d<=n){
while (d<=n) {
L[d]:=0;
d:=5*d;
}
b:=b+1;
d:=2^a*3^b;
}
a:=a+1;
d:=2^a;
}
H:=[];
for (j:=2;j<=n;j++) {
if (L[j]==0) H:=append(H,j);
}
return H;
}
ou encore en supprimant a,b,c et en preservant la valeur de d avant les while :
hamming(n):={
local H,L,d,j,k;
L:=makelist(x->x,0,n);
//les nbres de Hamming sont 2^a*3^b*5^c
d:=1;
while (d<=n) {
j:=d;
while (j<=n){
k:=j;
while (k<=n) {
L[k]:=0;
k:=5*k;
}
j:=3*j;
}
d:=2*d;
}
H:=[];
for (j:=2;j<=n;j++) {
if (L[j]==0) H:=append(H,j);
}
return H;
}
On tape :
hamming(20)
On obtient :
[2,3,4,5,6,8,9,10,12,15,16,18,20]
On tape :
hamming(40)
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