这是原来写的 solve:
inline int solve(int x, int y) {
int n = x, ans = 1;
for(int i = 2 ; i * i <= n ; ++ i)
if(x % i == 0) {
int cnt = 0;
while(x % i == 0) ++ cnt, x /= i;
ans = ans * C(y + cnt - 1, y - 1) % mod;
}
if(x > 1) ans = ans * C(y, y - 1) % mod;
return ans * qpow(2, y - 1) % mod;
}
结果 WA on #3。
然后我改写了一下:
inline int solve(int x, int y) {
int n = x, ans = 1;
for(int i = 2 ; i * i <= n ; ++ i)
if(x % i == 0) {
int cnt = 0;
while(x % i == 0) ++ cnt, x /= i;
ans = ans * C(y + cnt - 1, y - 1) % mod;
}
if(x > 1) ans = ans * C(y, y - 1) % mod;
if(ans * qpow(2, y - 1) % mod == 0) return 1;
return ans * qpow(2, y - 1) % mod;
}
只加了 if(ans * qpow(2, y - 1) % mod == 0) return 1; 这一句话。
人机不明白为什么这样是对的,还有为什么 ans * qpow(2, y - 1) % mod 会等于 0。
【内容疑似 AI 生成,请仔细甄别。】