Cod sursa(job #1940582)

Utilizator isav_costinVlad Costin Andrei isav_costin Data 26 martie 2017 18:06:54
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>

const int MOD=9901;

int pow( int k, int exp )
{
    int nk=1;

    k%=MOD;

    while( exp )
    {
        if( exp%2==1 )
        {
            nk*=k;
            nk%=MOD;
        }

        k*=k;
        k%=MOD;

        exp/=2;
    }

    return nk;
}

int sd( int p, int x )
{
    if( x==0 )
        return 1;
    else
        if( x%2==0 )
            return (1+p*sd(p,x-1))%MOD;
        else
            return sd(p,x/2)*(1+pow(p,(x+1)/2))%MOD;
}

int main()
{
    freopen( "sumdiv.in", "r", stdin );
    freopen( "sumdiv.out", "w", stdout );

    int a, b, sum=1, d=2, exp;

    scanf( "%d%d", &a, &b );

    while( d*d<=a )
    {
        exp=0;

        while( a%d==0 )
        {
            a/=d;
            exp++;
        }

        if( exp )
        {
            sum*=sd(d%MOD,exp*b);
            sum%=MOD;
        }

        d++;
    }

    if( a>1 )
    {
        sum*=sd(a%MOD,b);
        sum%=MOD;
    }

    printf( "%d", sum );

    return 0;
}