文章

27

粉丝

0

获赞

80

访问

2.4k

头像
幂次方 题解:二进制快速幂原理
P1017 贵州大学机试题
发布于2026年2月24日 14:06
阅读数 49

#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;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发