heureux(n):={ local tab,heur,m,j,p,k; tab:=j$(j=2..n); tab:=concat([0,0],[tab]); heur:=[]; p:=2; tantque (p<=n) faire m:=p; k:=0; pour j de p+1 jusque n faire si tab[j]!=0 alors k:=k+1; fsi; si irem(k,m)==0 alors tab[j]:=0 fsi; fpour; p:=p+1; si p<=n alors tantque tab[p]==0 and p<n faire p:=p+1 ftantque; si p==n and tab[p]==0 alors p:=n+1;fsi; fsi; ftantque; pour p de 2 jusque n faire si (tab[p]!=0) alors heur:=append(heur,p); fsi; fpour; retourne(heur); }:;Dans ce programme on peut se passer de la liste heur : il suffit de supprimer la dernière instruction pour et de mettre :
On peut aussi et ce sera plus rapide, modifier la liste tab au fur et
à mesure en supprimant à chaque étape les valeurs barrées c'est à
dire les valeurs mises à 0 en utilisant l'instruction remove et en
mettant au fur et à mesure les nombres heureux dans heur.
On tape avec les instructions françaises :
//renvoie la liste des nombres heureux<=n heureux2(n):={ local tab,heur,m,j,k,s; tab:=[j$(j=2..n)]; heur:=[]; s:=dim(tab); k:=0; tantque (s>0) faire j:=0; m:=tab[0]; heur[k]:=m; tantque j<s faire tab[j]:=0; j:=j+m; ftantque; tab:=remove(x->x==0,tab); s:=dim(tab); k:=k+1; ftantque; retourne(heur); }:;On tape : heureux2(100)