a^b

图片说明
对于这个题目,我们可以知道,其实就是一个快速幂的写法。

//非递归的写法
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
    ll a,b,mod;
    cin>>a>>b>>mod;
    ll ans=1;
    while(b){
        if(b&1) ans=ans*a%mod;
        b>>=1;
        a=a*a%mod;
    }
    cout<<ans%mod<<endl;
    return 0;
}
//递归的写法
#include<iostream>
using namespace std;
typedef long long ll;
ll a,b,mod;
ll qk(ll a,ll b){
    if(b==0) return 1;
    if(b&1) return a*qk(a,b-1)%mod;
    else{
        ll mul=qk(a,b/2);
        return mul*mul%mod;
    }
}
int main(){
    cin>>a>>b>>mod;
    ll ans=qk(a,b);
    cout<<ans%mod<<endl;
    return 0;
}

这里要注意的是我们可能会存在不会经过while的情况,所以记得最后还得mod一次,比如:1 0 1的情况,如果不mod的话最后就是1,其实是0,这里要注意一下。

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 13:38
点赞 评论 收藏
分享
点赞 评论 收藏
分享
LazyBreeze:项目尽量体现你对技术的理解和深度,不是说把中间件用一下就完事了,你项目里面提到集群和分布式,你真在服务器上部署过吗,感觉太假了,第二个项目说自己用了微服务的什么组件,只是用了没有自己的思考,很难让面试官注意到你的简历。针对某几个技术点自己多思考一下,考虑一下有没有别的替代方案,可以写一下,即使没有真的实现
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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