Pagini recente » Cod sursa (job #2843246) | Cod sursa (job #2583444) | Cod sursa (job #35638) | Cod sursa (job #1714118) | Cod sursa (job #2141052)
#include <bits/stdc++.h>
using namespace std;
typedef long long I64;
const I64 MOD = 9901;
ifstream in("sumdiv.in");
ofstream out("sumdiv.out");
I64 lgput(I64 b, I64 p)
{
I64 r = 1;
while(p)
{
if(p & 1)
r = r * b % MOD;
b = b * b % MOD;
p >>= 1;
}
return r;
}
I64 geom(I64 b, I64 p)
{
if( p == 0 ) return 1;
if( p == 1 ) return (b + 1) % MOD;
if( p % 2 == 1 ) {
return (1 + lgput(b, p/2 + 1)) * geom(b, p / 2) % MOD;
}
else {
return (1 + 1LL * b * (1 + lgput(b, p/2)) * geom(b, p/2));
}
}
int main()
{
I64 a, b;
in >> a >> b;
if( a + b == 0 ) {
out << "0\n";
return 0;
}
if( b == 0 ) {
out << "1\n";
return 0;
}
if( a == 0 ) {
out << "0\n";
return 0;
}
/* if( a == 1 ) {
out << b + 1 << '\n';
return 0;
}*/
I64 r = 1;
for( I64 ind = 2; ind * ind <= a; ++ind ) {
if( a % ind == 0 ) {
I64 cnt = 0;
while(a % ind == 0) {
++cnt;
a /= ind;
}
if( ind % MOD == 1 ) {
r = r * (cnt * b + 1) % MOD;
}
else if( ind % MOD != 0 ) {
r = r * (lgput(ind, cnt * b + 1) - 1 + MOD) * lgput(ind - 1, MOD - 2) % MOD;
}
}
}
if( a > 1 ) {
if( a % MOD == 1 ) {
r = r * (1 * b + 1) % MOD;
}
else if( a % MOD != 0 ) {
r = r * (lgput(a, 1 * b + 1) - 1 + MOD) * lgput(a - 1, MOD - 2) % MOD;
}
}
assert(r != 0);
out << r << '\n';
return 0;
}