Cod sursa(job #996422)

Utilizator gbi250Gabriela Moldovan gbi250 Data 11 septembrie 2013 20:57:38
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#define MOD 9901

using namespace std;

int a, b, nr, sum_div=1, i, exp;

int power (int base, int exp)
{
    int result=1;
    while(exp)
    {
        if( exp & 1 )
            result = (1LL * result * base) % MOD;
        base = (1LL * base * base)%MOD;
        exp >>= 1;
    }
    return result;
}

int main()
{
    freopen("sumdiv.in", "r", stdin);
    freopen("sumdiv.out", "w", stdout);
    scanf("%d %d", &a, &b);
    nr = power (a, b);

    for(i=2; nr>1 && i*i<=nr; ++i)
        if( !(nr%i) )
        {
            exp=0;

            while( !(nr%i) )
            {
                nr/=i;
                ++exp;
            }
            sum_div = ( 1LL * sum_div * (power(i, exp+1)-1)/(i-1) ) % MOD;
        }

    if( nr>1 )
        sum_div = ( 1LL * sum_div * (nr+1) ) % MOD;

    printf("%d\n", sum_div);
    return 0;
}