Pagini recente » Cod sursa (job #600266) | Cod sursa (job #2229793) | Borderou de evaluare (job #1314897) | Cod sursa (job #2547241) | Cod sursa (job #3206164)
#include <fstream>
#define mod 9901
using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
int a, b, c, ok, p;
long long sol=1;
int expr(int x, int y)
{
if(y==0)
return 1;
long long ans=expr(x,y/2)%mod;
if(y%2==0)
return (ans*ans)%mod;
else
return (x*ans*ans)%mod;
}
int inv(int x)
{
if(x%mod==0)
return 1;
if(x<=1)
return x;
return mod-mod/x*inv(mod%x)%mod;
}
int main()
{
cin>>a>>b;
for(int d=2; d*d<=a; d++)
{
ok=0;
p=0;
while(a%d==0)
{
p++;
a/=d;
ok=1;
}
sol*=(expr(d,p*b+1)+mod-1)*inv(d-1)%mod;
}
if(a>1)
sol*=(expr(a,b+1)+mod-1)*inv(a-1)%mod;
cout<<sol%mod;
}
/*
formula sumei divizorilor unui numar natural
S(n)=(p1^(e1+1)-1)/(p1-1)+(p2^(e2+1)-1)/(p2-1)+...+(pn^(en+1)-1)/(pn-1)
unde p1,p2,..,pn sunt factorii primi din descompunere
e1,e2,..,en sunt exponentii factorilor
*/