Pagini recente » Cod sursa (job #1571033) | Cod sursa (job #1054183) | Cod sursa (job #2062045) | Cod sursa (job #107380) | Cod sursa (job #2883148)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int MOD = 9901;
int a, b, ans = 1;
int lgput(int x, int n)
{
int val = 1;
while(n)
{
if(n & 1)
val = 1LL * val * x % MOD;
x = 1LL * x * x % MOD;
n >>= 1;
}
return val;
}
inline int invers_modular(int x)
{
return lgput(x, MOD - 2);
}
void desc()
{
if(a % 2 == 0)
{
int exp = 0;
do
{
exp++;
a /= 2;
}
while(a % 2 == 0);
exp *= b; ///exp e maxim 25
ans = 1LL * ans * (lgput(2, exp + 1) - 1) % MOD;
if(ans < 0)
ans += MOD;
}
for(int d = 3; d * d <= a; d += 2)
if(a % d == 0)
{
int exp = 0;
do
{
exp++;
a /= d;
}
while(a % d == 0);
exp *= b;
if((d - 1) % MOD == 0)
ans = 1LL * ans * (exp + 1) % MOD;
else
ans = 1LL * ans * (lgput(d, exp + 1) - 1) * invers_modular(d - 1) % MOD;
if(ans < 0)
ans += MOD;
}
if(a > 1)
{
if((a - 1) % MOD == 0)
ans = 1LL * ans * (b + 1) % MOD;
else
ans = 1LL * ans * (lgput(a, b + 1) - 1) * invers_modular(a - 1) % MOD;
if(ans < 0)
ans += MOD;
}
}
int main()
{
f >> a >> b;
desc();
g << ans;
f.close();
g.close();
return 0;
}