# 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);