Pagini recente » Cod sursa (job #1466072) | Cod sursa (job #1068517) | Cod sursa (job #1661121) | Cod sursa (job #2794217) | Cod sursa (job #1260135)
#include<stdio.h>
#include<math.h>
#define LL long long
const int MOD = 9901, NMAX = 30;
int nfact;
LL a, b, res;
LL lgPow (LL x, LL expo) {
if(expo == 0)
return 1;
if(expo & 1)
return (x * lgPow(x, expo - 1)) % MOD;
LL half = lgPow(x, expo / 2);
return (half * half) % MOD;
}
LL invMod (LL x) {
return lgPow(x, MOD - 2);
}
void fact (LL n) {
LL d, f, lim, e;
lim = sqrt(n);
d = 2;
res = 1;
while(n > 1 && d <= lim) {
e = 0;
while(n % d == 0)
++ e,
n /= d;
if(e) {
e *= b;
if(d % MOD == 1)
res = (res * (b + 1)) % MOD;
else
res = (res * ((lgPow(d, e + 1) - 1 + MOD) % MOD) * invMod(d - 1)) % MOD;
}
++ d;
}
if(n > 1) {
if(n % MOD == 1)
res = (res * (b + 1)) % MOD;
else
res = (res * ((lgPow(n, b + 1) - 1 + MOD) % MOD) * invMod(n - 1)) % MOD;
}
}
int main() {
freopen("sumdiv.in", "r", stdin);
freopen("sumdiv.out", "w", stdout);
scanf("%lld%lld", &a, &b);
if(b == 0) {
printf("1\n");
return 0;
}
fact(a);
printf("%lld\n", res);
return 0;
}