马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 liuhongrun2022 于 2023-6-8 20:10 编辑
https://www.luogu.com.cn/problem/SP21690
我的代码:
while True:
a, b, c = map(int, input().split())
if a == -1 and b == -1 and c == -1:
break
print(a ** b ** c % 1000000007)
在我本地机测试是没有任何问题的,上传到洛谷就 Unknown Error 了,这是怎么回事?
快速幂是一个 log 时间复杂度得算法,其原理如下:
当 b 为偶数:
a ^ b = (a * a) ^ (b / 2)
当 b 为奇数:
a ^ b = (a * a) ^ ((b - 1) / 2) * a
可以发现,这是把大问题拆成了一些小问题来求解,我们可以运用这个原理来快速求出 a^b 的结果,下面是一个 C++ 的实现方案:
long long qpower(long long a, long long b) {
if (a == 0 && b == 0) return 1;
long long res = 1;
while (b) {
if (b % 2 == 1) {
res *= a;
res %= p;
}
a *= a;
a %= p;
b /= 2;
}
return res % p;
}
在这里,p = 1e9 + 7,是根据题意确定的。
|