写在前面
本人CSDN博客主页:这里
一、题目
1、原题链接
2、题目描述
对任意正整数 N,==计算 X^N^mod233333 的值==。
输入格式
共一行,两个整数 X 和 N。
输出格式
共一行,一个整数,表示 X^N^mod233333 的值。
数据范围
1≤X,N≤10^9^
输入样例:
2 5输出样例:
32
二、解题报告
1、思路分析
(1)快速幂模板题。 (2)套用模板即可。
2、时间复杂度
时间复杂度O(logN)
3、代码详解
#include <iostream>
using namespace std;
typedef long long LL;
//快速幂模板,返回a^k%p的结果
int qmi(int a,int k,int p){
LL res=1%p; //注意%p
while(k){
if(k&1) res=res*a%p; //注意%p
k>>=1;
a=(LL)a*a%p; //注意%p
}
return res;
}
int x,n;
int main(){
cin>>x>>n;
cout<<qmi(x,n,233333);
return 0;
}
三、知识风暴
快速幂
- 基本思想:利用倍增的思想。若要求a^k^,则先将a的2的次方次的幂(指数从2^0^、2^1^,...,2^logk^)求出来,然后将k用二进制表示,则就写成了2的次方的和的形式,依次看k的每位二进制数,如果该位置为1,则需要将答案乘上a^该位二进制的权重^,否则不需要操作答案,最终遍历完k的每位二进制数,得到的便是a^k^。