社区讨论

求问有关快速幂

学术版参与者 13已保存回复 17

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
17 条
当前快照
1 份
快照标识符
@mict4dvs
此快照首次捕获于
2025/11/24 15:09
3 个月前
此快照最后确认于
2025/11/24 17:04
3 个月前
查看原帖
rt,本人比较喜欢写递归快速幂:
CPP
ll qpow(ll x, int y, int mod) {
	if(y == 1) return x;
	ll res = qpow(x, y / 2, mod);
	if(y & 1)
		res = res * res % mod * x % mod;
	else
		res = res * res % mod;
	return res;
}
但在做题的时候会 TLE 1.04s ~ 1.07s,但换成循环快速幂之后:
CPP
ll qpow(ll x, int y, int mod) {
	ll sum = 1;
	x %= mod;
	while(y > 0) {
		if(y & 1)
			sum = sum * x % mod;
		x = x * x % mod;
		y >>= 1;
	}
	return sum;
}
AC 700ms~800ms,这两种快速幂复杂度不是相同的吗,为什么会差 200+ms

回复

17 条回复,欢迎继续交流。

正在加载回复...