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