欢乐赛#40 | T3题解
2025-02-10 07:42:15
发布于:北京
50阅读
0回复
0点赞
T3:
这一题因为 最大可以达到 ,如果直接计算 再取模,数值会非常大,计算会非常慢。所以我们要使用快速幂[1]进行计算。
C++代码:
#include<iostream>
using namespace std;
int main(){
int n;
cin >> n;
long long s = 1, d = 114514;
while(n > 0){
if(n % 2 == 1){
s *= d;
s %= 998244353;
}
d *= d;
d %= 998244353;
n /= 2;
}
cout << s;
return 0;
}
Python代码:
n = int(input())
s = 1
d = 114514
while n > 0:
if n % 2 == 1:
s *= d
s %= 998244353
d **= 2
d %= 998244353
n //= 2
print(s)
快速幂的基本思想是利用二分的方式计算幂次,通过将指数不断减半来减少乘法次数,从而降低时间复杂度。
我们使用如下步骤进行计算:
首先设定初始值 ,。
其次通过二进制拆解指数 ,如果当前位为 1,则将 乘上当前的底数 并与 取模;
然后每次将 平方,同时对 再次进行取模,使得数值不会过大;
最后将 右移一位,继续计算,直到 。 ↩︎
全部评论 1
实际上 的数据还达不到要用快速幂的地步
2025-02-10 来自 广东
0我试试
2025-02-10 来自 北京
02025-02-10 来自 北京
0不行
2025-02-10 来自 北京
0
有帮助,赞一个