# PREFIXES DE L'ECRITURE DECIMALE DE 2^k.
#on fait prudemment le menage avant de commencer
F:='F':
NF:='NF':
# le compteur c1 va compter le nombre de points qui ne
# correspondent pas a une premiere rencontre. il sert d'indice
# pour la table NF (non first).
# c2 donne la borne superieure des n formant un intervalle
# contigu depuis 1 que l'on a rencontre.
c1:=0:
c2:=0:
kmax:=1000:
# on ne veut voir que les entiers plus petits que nmax.
nmax:=1000:
# il est donc inutile de regarder les prefixes dont la longueur
# excede celle de nmax.
L:=evalf(log[10](nmax)):
# premiere version prudente: for k to kmax do
# deuxieme version optimiste: for k while c2 < nmax do
for k while c2 < nmax do
N:=2^k;
N10:=convert(N,base,10);
l:=nops(N10)-1;
for c3 from 0 to min(l,L) do
n:=add(N10[l-c3+c4+1]*10^c4,c4=0..c3);
if assigned(F[n]) then
c1:=c1+1;
NF[c1]:=[n,k]
else
F[n]:=[n,k];
if n=c2+1 then
for c5 from n+1 while assigned(F[c5]) do od;
c2:=c5-1
fi
fi
od
od:
#print(F);
c1,c2;
11680, 1058
k;
3974
#print(NF);
picF:=plot([seq(F[n],n=1..c2)],style=point,symbol=box,color=red):
picNF:=plot([seq(NF[i],i=1..c1)],style=point,symbol=circle,color=blue):
plots[display]({picF,picNF},view=[0..nmax,0..kmax],scaling=constrained);