Mai intai trebuie sa te autentifici.
Cod sursa(job #757345)
| Utilizator | Data | 11 iunie 2012 21:24:37 | |
|---|---|---|---|
| Problema | Suma divizorilor | Scor | 40 |
| Compilator | cpp | Status | done |
| Runda | Remember Mihai Pătrașcu | Marime | 0.55 kb |
#include<cstdio>
#include<cmath>
#define MOD 9901
int a,b;
int modpow (int x,int y)
{
if(y==1)
return x;
int n=modpow (x,y/2);
n=(n*n)%MOD;
if(y%2)
n=(n*x)%MOD;
return n;
}
int calc (int d)
{
int e=0;
while(a%d==0)
e++,a/=d;
int n=(modpow (d,e*b+1)-1+MOD)%MOD;
int m=(d-1+MOD)%MOD;
return (n*modpow (m,MOD-2))%MOD;
}
int main()
{
freopen ("sumdiv.in","r",stdin);
freopen ("sumdiv.out","w",stdout);
int r=1;
scanf ("%d%d",&a,&b);
if(a%2==0)
r=calc (2);
for(int i=3;i<=sqrt (a);i++)
if(a%i==0)
r=(r*calc (i))%MOD;
printf ("%d",r);
}
