Cod sursa(job #2691076)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 26 decembrie 2020 22:18:49
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb

#include <stdio.h>
#define MOD 9901

long long caca( long long n, long long q )
{
    long long d = 2, p, s = 1, suma;
    while( n > 1 ){
        suma = p = 1;
        //printf( "%lld\n", p );
        while( n % d == 0 ){
            n /= d;
            p *= d;
            p %= MOD;
            suma += p;
            suma %= MOD;
           //printf( "%lld\n", p );
        }
        if( p > 1 ){
            for( int i = 0; i < q - 1; i++ ){
                p *= d;
                p %= MOD;
                suma += p;
                suma %= MOD;
                //printf( "%lld\n", p );
            }
            s = ( s * suma ) % MOD;
        }
        ++d;
        if( d > 2 )
            ++d;
        if( n > 1 && d * d >= n )
            d = n;
    }
    return s;
}

int main()
{
    long long n, p;
    FILE *fin = fopen( "sumdiv.in", "r" );
    fscanf( fin, "%lld %lld", &n, &p );
    fclose( fin );
    FILE *fout = fopen( "sumdiv.out", "w" );
    fprintf( fout, "%lld", caca( n, p ) );
    fclose( fout );
    return 0;
}