【题目来源】
https://www.acwing.com/problem/content/3628/
【题目描述】
对任意正整数 N,计算 X^N mod 233333 的值。
【输入格式】
共一行,两个整数 X 和 N。
【输出格式】
共一行,一个整数,表示 X^N mod 233333 的值。
【数据范围】
1≤X,N≤10^9
【输入样例】
2 5
【输出样例】
32
【算法分析】
● 快速幂的模板题可参见:
洛谷 P1226:https://blog.csdn.net/hnjzsyjyj/article/details/143135845
AcWing 875:https://blog.csdn.net/hnjzsyjyj/article/details/143168167
● 快速幂,又称二进制取幂,是一个以 的时间复杂度计算 的小技巧,而暴力的计算需要 的时间复杂度。
● 快速幂的原理?
答:快速幂的原理为"++将求幂的任务按照指数 ++++++++++++ 的++ ++二进制表示++ ++分割成更小的任务++ "。例如:
因为 有 个二进制位,因此当知道了 后,我们只需计算 次乘法就可以计算出 。
● 带取模的快速幂代码
计算过程中,为了防止溢出,需要进行"取模"运算,其运算规则如下:
(a+b)%p=(a%p+b%p)%p
(a-b)%p=(a%p-b%p)%p
(a*b)%p=(a%p*b%p)%p
【算法代码】
cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MOD=233333;
int fastPow(LL a,LL b,LL p) {
LL ans=1;
while(b) {
if(b & 1) ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans;
}
int main() {
LL x,n;
cin>>x>>n;
cout<<fastPow(x,n,MOD)<<endl;
return 0;
}
/*
in:
2 5
out:
32
*/
【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/143168167
https://blog.csdn.net/hnjzsyjyj/article/details/143135845