文章
27
粉丝
0
获赞
80
访问
2.4k
#include <iostream>
using namespace std;
//如n=30,对应二进制为111110,权重为16+8+4+2+1+0
long long fastPow(long long x,int n,int mod){
long long res=1;
x=x%mod;
while(n>0){
//当前权位为1时才乘,为0不乘,比如n=24,11000,只乘16和8
if(n%2==1)res=res*x%mod;//奇数==最后位是1
x=x*x%mod;//第一次x变成x²,用于下一位权位,当达到第二个1时,已经是x的8次方了
n=n>>1;//不断丢掉判断过的位,111110变成11111,末尾是1,显然是奇数,下次肯定会乘上x²
}
return res;
}
int main(){
long long x;
int n;
cin>>x>>n;
cout<<fastPow(x,n,233333);
return 0;
}
登录后发布评论
暂无评论,来抢沙发