pasde21(n):={ local L,j,J,p; L:=[0]; p:=1; j:=1; tantque p<n faire J:=convert(j,base,3); si not(est_element(2,J)) alors L:= append(L,j); p:=p+1; fsi; j:=j+1; ftantque; retourne L; } :;
pasde22(n):={ local J,a,p,L; L:=[]; pour p de 0 jusque n-1 faire J:=convert(p,base,2); a:=convert(J,base,3); L:=append(L,a) fpour retourne L; }:;
pasde23(n):={ local L,p; L:=[0]; p:=1; tantque p<n faire L:=mat2list(map(L,x->[x*3,x*3+1])); p:=2*p; ftantque; L:=mid(L,0,n); retourne L; } :;Dans le programme ci-dessus la liste L est recréée à chaque itération, il est donc préférable de modifier ce programme pour qu'à chaque itération on ne calcule que les nouveaux termes dans la liste LA et ce sont ces nouveaux termes qui créront les termes suivants...
pasde23b(n):={ local L,p,LA; L:=[0,1]; LA:=[1]; p:=2; tantque p<n faire LA:=mat2list(map(LA,x->[x*3,x*3+1])); L:=concat(L,LA); p:=2*p; ftantque; L:=mid(L,0,n); retourne L; } :;À la fin de la boucle tantque, L a 2j = p
pasde23t(n):={ local L,p,LA; L:=[0,1]; LA:=[1]; p:=2; tantque 2p<=n faire LA:=mat2list(map(LA,x->[x*3,x*3+1])); L:=concat(L,LA); p:=2*p; ftantque; LA:=mat2list(map(mid(LA,0,iquo(n-p+1,2)),x->[x*3,x*3+1])); L:=concat(L,LA); retourne mid(L,0,n); } :;
pasde24(n):={ local L,j,p,puis3j; L:=[0]; j:=0; p:=1; puis3j:=1; tantque p<n faire L:=concat(L,L+[puis3j$p]); //L:=concat(L,map(L,x->x+puis3j)); j:=j+1; puis3j:=3*puis3j; p:=2*p; ftantque; L:=mid(L,0,n); retourne L; } :;À la fin de la boucle tantque, L a 2j = p > = n éléments : il faut donc raccourcir la liste L (L:=mid(L,0,n)) et on calcule des termes pour rien...On modifie donc le programme :
pasde24b(n):={ local L,j,p,puis3j; L:=[0]; j:=0; p:=1; puis3j:=1; tantque 2*p<=n faire L:=concat(L,L+[puis3j$p]); j:=j+1; puis3j:=3*puis3j; p:=2*p; ftantque; L:=concat(L,mid(L,0,n-p)+[puis3j$(n-p)]);; retourne L; }:;
Ce qui montre que le dernier algorithme est le meilleur...