poniedziałek, 14 lutego 2022

Palindromiczne liczby pierwsze (Palindromic prime numbers)

Naiwnie
 select( i -> i == fromdigits( Vecrev( digits( i ) )), primes( [ 2, 1000 ] ) )

Lepiej

  1. p10( n ) = 10^n;
  2.  
  3. rew( m, c ) = {
  4.     local( t, n );
  5.     t = 0; n = m;
  6.     for(i=1, c,
  7.         t = t*10 + n%10;
  8.         n \= 10 );
  9.     return( t ) }
  10.  
  11. range( p, w, disp = 0 ) = {
  12.     local( w10, mi, mj, z, pal, q ,= -1);
  13.     w10 = p * p10( w ) + p;
  14.     mi  = p10( w \ 2 + 1 );
  15.     mj  = p10( w \ 2     );
  16.     z   = p10( w \ 2 - 1 ) - 1;
  17.     for( i = 0, z,
  18.         pal = rew( i, w\2 );
  19.         q = w10  + i * mi + pal;
  20.         for( j = 0, 9,
  21.             if( isprime(+ j * mj ),
  22.                 k++;
  23.                 if( disp,
  24.                    if((% 8)==0,print());
  25.                    print1( q + j * mj, "\t") ) ) ) );
  26.     return( [ k+1, q + 9*mj ]); }

  27. gener( disp=0 ) = {
  28.     local( t=[ 1, 3, 7, 9], s=5, x,start );
  29.     start = getabstime();
  30.     for( w = 1, 8,
  31.         for( i = 1, 20 - 2*w, print1(" "));
  32.         print1( p10(w*2));
  33.         for( i = 1, 4,
  34.             print1(".");
  35.             x=range(t[i], w*2, disp);
  36.             s+=x[1]; );
  37.     printf( "\t %20d  # %8d   %8.3g [sec]\n", 
  38.                 x[2] s,  (getabstime()-start)/1000.0) )
  39. }

czwartek, 7 października 2021

Combination list

 Crv ( k, v, d ) = {
    if( d == k,
        print ( vecextract( v , "2..-2" ) )
    ,   
        for( i = v[ d + 1 ] + 1, #v,
            v[ d + 2 ] = i;
            Crv( k, v, d + 1 ) ));

combRV( n, k ) = Crv ( k, vector( n, X, X-1), 0 );
\\--------------------------------------------------------------
Cr ( c, z, b, n, k ) = {
    if( z < b,  print1( c, " " );
        if( n>0, Cr( c+1, z  , b*  k  \n, n-1, k - 1 ))
    ,
        if( n>0, Cr( c+1, z-b, b*(n-k)\n, n-1, k     ))
    );
}

combR( n, k ) = { 
    local( 
        bnk = binomial( n,   k ),
        b11 = bnk * k \ n );          \\binomial( n-1, k-1 ) );
    for( z = 0,  bnk - 1,
        Cr( 1, z, b11, n-1, k-1 );
        print
    );
}
\\--------------------------------------------------------------
Ci( z, b, n, k ) = { local( c = 1 );
    n--; k--;
    while( k >= 0 ,
        if( z < b,
            print1(c, "-");
            c++;
            if( n > 0, 
                b = b*k \ n);
            n--; k--;
        ,
            c++;
            z -= b;
            b = b*(n-k)\n;
            n--
        )
    );
}

combI( n, k ) = { 
    local(  bnk = binomial( n, k ), 
            b11 = bnk * k \ n );            \\ binomial( n-1, k-1 )
    for( z = 0, bnk - 1,
        Ci(z,   b11,   n, k );
        print
    );
}

poniedziałek, 19 kwietnia 2021

Dzielniki liczby (naiwnie)

 sumaD=0; liczbaD = 0; 

dzielniki( n ) = { local( j, d=2, g=n );
sumaD = 1; liczbaD = 1;
while( d < g, 
j = n\d; 
if( d * j == n,
sumaD   += d + j; 
liczbaD += 2 );
d++ ;  g = j
);
if( g*j == n,  \\ n == x^2
liczbaD--; sumaD -= j )
};

sobota, 23 lutego 2019

Piękna myśl

Jeśli chcesz się nauczyć - czytaj i słuchaj,
Jeśli chcesz coś zrozumieć - pisz o tym,
Jeśli chcesz osiągnąć mistrzostwo - nauczaj o tym.

piękna myśl na dziś.

ludzie podchodzą do tego od wszystkich czterech możliwych stron
tylko czterech?

jedno chciałem zrozumieć, a tylko słuchałem i czytałem
czegoś chciałem się nauczyć, tylko pisałem o tym i w tym
chciałem być mistrzem, taaa nauczałem,

nie silnia ale klika (grafy)
można by zapytać OEIS ile jest dróg, ,,,,,,,

niedziela, 20 maja 2012

najmłodsza cyfra silni


int ld(int n){
        int q, t, x, z, ai;
        q=0; t=0; x=0;
        if( ((n%5)&1)==0 ) t=n%5;
        n /= 5;
        while(n){
                ai=n%5; n/=5;
                q+=ai; x+=q;
                if((ai&1)==0)
                        t += ai; }
        z = (x+t/2)%4; 
        if( z==0 ) return 6;
        else return 1<<z;}

niedziela, 13 maja 2012

binomial


unsigned long binomial (int n, int m) { 
        unsigned long cnm = 1UL; 
        int i, f; 
        if (m*2 >n) 
                m = n-m; 
        for (i=1 ; i <= m; n--, i++) { 
                if ((f=n) % i == 0) 
                        f /= i; 
                else 
                        cnm /= i; 
                cnm *= f; } 
        return cnm; }