lunedì 12 aprile 2010

Setacciatore di Repfigit

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







 

0 commenti:

Posta un commento