Mai intai trebuie sa te autentifici.

Cod sursa(job #1169079)

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