这道题是可以用逆元写的(变换取模也行), 只需要特判$a - 1 \equiv 0 \pmod{p}$即可
当 $a \equiv 1 \pmod{p}$ 时, 证明 $\frac{a^x - 1}{a - 1} \equiv x \pmod{p}$
为了证明 $\frac{a^x - 1}{a - 1} \equiv x \pmod{p}$ 当 $a \equiv 1 \pmod{p}$,我们可以使用多项式除法和模运算的性质。
-
多项式表示:
多项式 $a^x - 1$ 可以被 $a - 1$ 整除,且商为 $a^{x-1} + a^{x-2} + \cdots + a + 1$。这可以写为:
$ a^x - 1 = (a - 1)(a^{x-1} + a^{x-2} + \cdots + a + 1)$
因此,我们有:
$ \frac{a^x - 1}{a - 1} = a^{x-1} + a^{x-2} + \cdots + a + 1$ -
模运算:
由于 $a \equiv 1 \pmod{p}$,我们可以将 $a$ 替换为 1 在表达式 $a^{x-1} + a^{x-2} + \cdots + a + 1$ 中:
$ a^{x-1} + a^{x-2} + \cdots + a + 1 \equiv 1^{x-1} + 1^{x-2} + \cdots + 1 + 1 \pmod{p}$
由于 $1^k = 1$ 对于任何整数 $k$,表达式简化为:
$ 1^{x-1} + 1^{x-2} + \cdots + 1 + 1 = x$
因此,我们有:
$ \frac{a^x - 1}{a - 1} \equiv x \pmod{p}$ -
结论:
我们已经证明了,当 $a \equiv 1 \pmod{p}$ 时,$\frac{a^x - 1}{a - 1} \equiv x \pmod{p}$。
所以最终答案是: $x$
所以当满足这个条件时让答案累乘上$x$即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 9901;
int qp(int a, int b) {
int res = 1;
while (b) {
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res % mod;
}
signed main() {
int a, b;
cin >> a >> b;
int ans = 1;
for (int i = 2; i * i <= a; i ++ ) {
int res = 0;
if (a % i == 0) {
while (a % i == 0) a /= i, res ++;
if ((i - 1) % mod) {
ans = ans * ((qp(i, res * b + 1) - 1 + mod) % mod * qp(i - 1, mod - 2) % mod) % mod;
} else ans = ans * (res * b + 1) % mod; //特判让答案累乘上指数
}
}
if (a > 1) {
if ((a - 1) % mod) {
ans = ans * ((qp(a, b + 1) - 1 + mod) % mod * qp(a - 1, mod - 2) % mod) % mod;
} else ans = ans * (b + 1) % mod;
}
if (a == 0) ans = 0;
cout << ans << '\n';
return 0;
}