Pagini recente » Cod sursa (job #3277400) | Cod sursa (job #2289708) | Cod sursa (job #587517) | Cod sursa (job #2433689) | Cod sursa (job #3121726)
#include <bits/stdc++.h>
#define cin in
#define cout out
#define ll long long
#define MOD 9901
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
ll a,b,rez=1,d=3,p,X,Y;
ll expr(ll a,ll b)
{
if(b==0) return 1;
else
{
ll p=expr(a,b/2);
if(b%2==0)
return p*p%MOD;
else
return p*p%MOD*a%MOD;
}
}
void invmod(ll a,ll b,ll& x,ll& y)
{
if(b==0) x=y=1;
else
{
ll x1,y1;
invmod(b,a%b,x1,y1);
x=y1;
y=x1-a/b*y1;
}
}
int sum_div(int n)
{
int s=0;
for(int d=1;d*d<=n;++d)
{
if(n%d==0){
s+=d;
s+=n/d;
}
if(d*d==n)
s-=d;
}
return s%MOD;
}
int main()
{
cin>>a>>b;
a%=MOD;
//cout<<sum_div(a)<<'\n';
if(a==0)
{
cout<<0;
return 0;
}
while(a%2==0)
a/=2,p++;
if(p)
{
rez=rez*(expr(2,p*b+1)%MOD+MOD-1)%MOD;
invmod(1,MOD,X,Y);
if(X<0) X+=MOD;
rez=rez*X%MOD;
}
while(d*d<=a)
{
p=0;
while(a%d==0)
a/=d,p++;
if(p)
{
rez=rez*(expr(d,p*b+1)%MOD+MOD-1)%MOD;
invmod(d-1,MOD,X,Y);
if(X<0) X+=MOD;
rez=rez*X%MOD;
}
d+=2;
}
if(a>1)
{
rez=rez*(expr(a,b+1)%MOD+MOD-1)%MOD;
invmod(a-1,MOD,X,Y);
if(X<0) X+=MOD;
rez=rez*X%MOD;
}
cout<<rez;
return 0;
}