关于本题快速幂的疑惑
查看原帖
关于本题快速幂的疑惑
939357
aish楼主2023/11/8 19:38

这是我第一次写的代码:

struct Node {
	lint x; int flag;
};

Node qpow(lint a, lint x, int p) {
	int fa = a >= p, fr = 0;
	lint r = 1; a %= p;
	while (x) {
		if (x & 1) {
			r = r * a, fr |= fa;
			if (r >= p) fr = 1;
			r %= p;
		} a = a * a, fr |= a >= p ? 1 : 0, a %= p;
		x >>= 1;
	} return {r, fr};
}

这是 WA 了的,而如果我把最后一行改成:

return {r, fr | fa};

那么就可以 AC,我不是很理解,例如 qpow(3, 1, 5) 是不会溢出的,但是在 return {r, fr | fa} 的代码中判断出是会超过 p 的……这是合理的吗?

2023/11/8 19:38
加载中...