Pagini recente » Cod sursa (job #1290399) | Cod sursa (job #333591) | Cod sursa (job #2174472) | Istoria paginii utilizator/speedylawl | Cod sursa (job #2273350)
#include <fstream>
using namespace std;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
const long long MOD=9901;
long long a,b;
long long lgput(long long n,long long k)
{
long long rez=1;
while(k)
{
if(k%2)
rez=(long long)(rez*n)%MOD;
n=(long long)(n*n)%MOD;
k/=2;
}
return rez%MOD;
}
long long suma(long long n,long long k)
{
int rez=0;
for(int i=0;i<=k;i++)
rez=(long long)(rez+lgput(n,i))%MOD;
return rez;
}
void desc()
{
long long d=2,rezfin=1,cnt=0;
while(d*d<=a)
{
cnt=0;
while(a%d==0)
{
a/=d;
cnt++;
}
if(d%MOD!=1)
rezfin=(long long)((long long)((rezfin*(lgput(d,cnt*b+1)-1+MOD)%MOD))*(lgput(d-1,MOD-2)+MOD))%MOD;
else
rezfin=(long long)(rezfin*suma(d,b))%MOD;
d++;
}
if(a!=1)
{
if(a%MOD!=1)
rezfin=(long long)((long long)((rezfin*(lgput(a,b+1)-1+MOD)%MOD))*(lgput(a-1,MOD-2)+MOD))%MOD;
else
rezfin=(long long)(rezfin*suma(a,b))%MOD;
}
out<<rezfin%MOD;
}
int main()
{
in>>a>>b;
if(b==0)
{
out<<1;
return 0;
}
if(a==0)
{
out<<0;
return 0;
}
desc();
return 0;
}