Pagini recente » Cod sursa (job #3223622) | Cod sursa (job #1683833) | Cod sursa (job #1599624) | Cod sursa (job #2314396) | Cod sursa (job #1886044)
#include <cstdio>
using namespace std;
const int MOD = 9901;
int a, b;
int pow(int baza, long long exp) {
int ans = 1;
baza %= MOD;
for( ; exp; exp >>= 1) {
if(exp & 1)
ans = (ans * baza) % MOD;
baza = (baza * baza) % MOD;
}
if(ans == 0)
ans += MOD;
return ans;
}
void gcd(int x, int y, int &aa, int &bb) {
if(y == 0) {
aa = 1;
bb = 0;
} else {
gcd(y, x % y, aa, bb);
int backup = aa;
aa = bb;
bb = backup - bb * (x / y);
}
}
void descompunere() {
int d = 2, rasp = 1, invers, y;
long long e;
while((long long)d * d <= a && a > 1) {
e = 0;
while(a % d == 0) {
a /= d;
++ e;
}
if(e > 0) {
e *= b;
gcd(d - 1, MOD, invers, y);
if(invers <= 0)
invers = MOD + invers % MOD;
rasp = ( ((rasp * (pow(d, e + 1) - 1)) % MOD) * invers ) % MOD;
}
++ d;
}
if(a > 1) {
e = b;
d = a;
gcd(d - 1, MOD, invers, y);
if(invers <= 0)
invers = MOD + invers % MOD;
rasp = ( ((rasp * (pow(d, e + 1) - 1)) % MOD) * invers ) % MOD;
}
printf("%d", rasp);
}
int main() {
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%d%d", &a, &b);
if(a == 0)
printf("0");
else
descompunere();
return 0;
}