97. 约数之和 - AcWing题库高质量的算法题库https://www.acwing.com/problem/content/99/
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1e6 + 10;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
#define lowbit(x) ((x)&(-x))
const int mod = 9901;
ll p[MAXN];
ll rec[MAXN];
int cnt;
void div(ll n) {
for (ll i = 2; i * i <= n; i++) {
// printf("===\n");
if (n % i == 0) {
p[++cnt] = i;
while (n % i == 0) {
n /= i;
rec[cnt]++;
}
}
}
if (n > 1)
p[++cnt] = n, rec[cnt] = 1;
}
ll q_pow(ll a, ll b) {
ll ans = 1;
while (b) {
if (b & 1)
ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans;
}
int main() {
ll a, b;
scanf("%lld %lld", &a, &b);
if (a == 0) {
printf("0");
return 0;
}
div(a);
ll ans = 1;
for (int i = 1; i <= cnt; i++) {
//printf("%lld\n", ans);
if ((p[i] - 1) % mod == 0) {
ans = (b * rec[i] + 1) % mod * ans % mod;
} else {
ll x = q_pow(p[i], b * rec[i] + 1);
x = (x - 1 + mod) % mod;
ll y = q_pow(p[i] - 1, mod - 2);
ans = ans * x % mod * y % mod;
}
}
printf("%lld", ans);
return 0;
}