lzy20091001 @ 2024-05-09 23:34:50
加上 #define int long long
就过了,请问哪里需要开 long long
?
#include <iostream>
const int MOD = 9901;
int p[15], cnt[15], ind[15];
int qpow(int a, int b) // 快速幂
{
int res = 1;
while (b > 0)
{
if (b & 1)
res = res * a % MOD;
a = a * a % MOD;
b >>= 1;
}
return res;
}
int inv(int x) { return qpow(x, MOD - 2); } // 逆元
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
int a, b, ans = 1;
std::cin >> a >> b;
// 分解质因数
for (int i = 2; i * i <= a; i++)
{
if (a % i == 0)
p[++p[0]] = i;
while (a % i == 0)
{
a /= i;
cnt[p[0]] += b;
}
}
if (a != 1)
{
p[++p[0]] = a;
cnt[p[0]] = b;
}
// 求解答案
for (int i = 1; i <= p[0]; i++)
{
int res = 0;
if (p[i] % MOD == 1)
res = (cnt[i] + 1) % MOD;
else
res = (qpow(p[i], cnt[i] + 1) - 1) * inv(p[i] - 1) % MOD;
ans = ans * res % MOD;
}
std::cout << (ans + MOD) % MOD << "\n";
return 0;
}
by lunjiahao @ 2024-05-10 07:09:16
@lzy20091001
快速幂爆 int
了
可以在 while
前面加一个 a%=MOD
by fjy666 @ 2024-05-10 09:00:05
@critnos 求逆会爆
by Rosaya @ 2024-05-10 09:03:17
@critnos 我的锅,这个模数很小。