算法入门-倍增-快速幂原理

【模板】快速幂

https://ac.nowcoder.com/acm/problem/226804

  • 对于a^b,可以将b转化为二进制表示(10:1010),故a^b可拆分成a^b1*a^b2*……
  • 因此记录一个base=a,如果b的对应位为1,ans*=base
  • 最后再给base倍增:base*=a,b位移:b>>=1
#include<bits/stdc++.h>
using namespace std;
long long qpow(long long a,long long b,long long p){
    a%=p;
    long long ans=1;
    while(b){
        if(b&1)ans*=a%p;
        a*=a%p;
        b>>=1;
    }
    return ans%p;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        long long a,b,p;
        scanf("%lld%lld%lld",&a,&b,&p);
        printf("%lld\n",qpow(a,b,p));
    }
    return 0;
}
全部评论

相关推荐

头像
10-27 15:50
门头沟学院 Java
想进开水团喝开水:有一种店 只能外卖 不能堂食 你猜为什么
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务