Algoritmo per i numeri di Keith
Vi presentiamo un algoritmo piuttosto veloce, per la ricerca dei numeri Repfigit o numeri di Keith, che occupa poca memoria grazie ad una semplice tecnica di shifting ciclico su un vettore di dimensione pari agli m digit, che costituiscono un numero. Con esso potrete ritrovare tutti i valori oggi noti e tentare di spingervi sui Repfigit oltre i fatidici 34 digit ... vi servirà un pò di tempo però.
L'algoritmo eventualmente potrete modificarvelo anche per stampare su file i risultati. L'ho proposto anche su Wikipedia.
/*
* Keith's numbers Research (Repfigit) - R. Turco
*
*/
KNRA(start=10, end=100000)=local();{
for(i=start,end,
KNR(i);
);
}
KNR(i)=local(p=0,s="",out="",m=0,j=0, s0=0,s1=0,s2=0, trovato=0); {
s = concat(s,i);
m = length(s);
MyW=Vecsmall(s);
v=vector(m);
for( j=1,m,
v[j] = MyW[j]-48;
out = concat( out, v[j] );
out = concat( out, "," );
s1 = s1 + v[j];
);
out = concat( out, s1 );
out = concat( out, "," );
v[1]=s1;
p=1;
while( trovato == 0 '&' s1 '<' i+1
p++;
if( p>m, p=1;);
s1 = 0;
for( j=1,m,
s1 = s1 + v[j];
);
out = concat( out, s1 );
if( s1 == i, print("Esempio trovato : ", i, " len : ", m); trovato = 1; print(out););
if( s1 != i, out = concat( out, "," ););
v[p] = s1;
);
}
lunedì 12 aprile 2010
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento