Cod sursa(job #2691073)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 26 decembrie 2020 21:59:05
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#define MOD 9901

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

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