Cod sursa(job #1169071)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 10 aprilie 2014 14:17:15
Problema Suma divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#define MOD 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
int A,B;
int Prime[5000005],Exp[5000005];
void Prime_Facts()
{
    int i=2;
    int initial=A;
    while(i*i<=initial && A>0)
    {
        if(A%i==0)
            Prime[++Prime[0]]=i;
        while(A%i==0)
        {
            Exp[Prime[0]]++;
            A/=i;
        }
    }
    if(A!=1)
    {
        Prime[++Prime[0]]=A;
        Exp[Prime[0]]=1;
    }
}
int Power_Log(int N,int P)
{
    int sol=1;
    while(P>0)
    {
        if(P%2==1)
            sol=(sol*N)%MOD;
        N=(N*N)%MOD;P/=2;
    }
    return sol;
}
void Browse()
{
    int result=1;
    for(int i=1;i<=Prime[0];i++)
    {
        int exponent=Exp[i]*B;
        int value=Power_Log(Prime[i],exponent+1);
        value--;
        value+=MOD;
        value%=MOD;
        result*=value*Power_Log(Prime[i]-1,MOD-2);
        result%=MOD;
    }
    g<<result<<"\n";
}
int main()
{
    f>>A>>B;
    Prime_Facts();
    Browse();
    return 0;
}