Pagini recente » Cod sursa (job #86616) | Cod sursa (job #205923) | Cod sursa (job #555212) | Cod sursa (job #367757) | Cod sursa (job #2370386)
#include <iostream>
#include <fstream>
std::ifstream f("sumdiv.in");
std::ofstream g("sumdiv.out");
const int MOD = 9901;
long long a,b;
long long lgput(long long a,long long b)
{
unsigned long long r = 1;
while(b)
{
if(b&1)
r = ((r % MOD) * (a % MOD)) % MOD;
a = ((a % MOD) * ( a % MOD)) % MOD;
b >>= 1;
}
return (r % MOD);
}
long long FindSum(long long n,long long k)
{
long long Result = 0;
for(long long i = 0;i <= k;i++)
Result = (Result + lgput(n,i)) % MOD;
return Result;
}
void Descompose()
{
long long d = 2,Res = 1,cnt = 0;
while(d * d <= a)
{
cnt = 0;
while(a % d)
{
a /= d;
cnt++;
}
if(d % MOD != 1)
Res = (long long)((long long)((Res * (lgput(d,cnt * b + 1) -1 + MOD) % MOD)) * (lgput(d -1 ,MOD -2 ) + MOD)) % MOD;
else
Res=(long long)(Res*FindSum(d,b))%MOD;
d++;
}
if(a!=1)
{
if(a % MOD != 1)
Res=(long long)((long long)((Res*(lgput(a,b+1)-1+MOD)%MOD))*(lgput(a-1,MOD-2)+MOD))%MOD;
else
Res = (long long)(Res * FindSum(a,b))%MOD;
}
g << Res % MOD;
}
int main()
{
f >> a >> b;
if(b == 0)
{
g << 1;
return 0;
}
if(a == 0)
{
g << 0;
return 0;
}
Descompose();
}