Cod sursa(job #862069)

Utilizator misinozzz zzz misino Data 22 ianuarie 2013 09:43:35
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<cmath>
#define MOD 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
long long s;
int i,p,b,a,p1,p2;
int putere(int n,int  p)
{long long x=1,q,nr;
q=p;
nr=n;
while(p)
{if(p&1)
x=(x*nr)%MOD;
nr=(nr*nr)%MOD;
p/=2;
}
p=q;
return x;
}
int main()
{
    f>>a>>b;
    s=1;
    for(i=2;i*i<=a&&a>1;++i)
    if(!(a%i))
    {
        p=0;
        while(a%i==0)
        {
            a/=i;
            ++p;
        }
        if(i%MOD==1)
        s*=1LL*(p+1)%MOD;
        p1=(putere(i,p*b+1)+MOD-1)%MOD;
        p2=putere(i-1,MOD-2);
        s*=1LL*p1*p2;
        s%=MOD;
    }
    if(a>1)
    {
        if(i%MOD==1)
        s=(s*1LL*(b%MOD+1))%MOD;
        i=a;
        p1=(putere(i,b+1)+MOD-1)%MOD;
        p2=putere(i-1,MOD-2);
        s*=1LL*p1*p2;
        s%=MOD;
    }
    if(a==0)
    g<<0<<'\n';
    else
    g<<s<<'\n';
    return 0;
}