MnZnMgMg 求助
查看原帖
MnZnMgMg 求助
773915
endswitch楼主2024/10/18 10:57

这是原来写的 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 会等于 00

【内容疑似 AI 生成,请仔细甄别。】

2024/10/18 10:57
加载中...