题解 | 好多次方

好多次方

https://www.nowcoder.com/practice/8bf1186260634b209b5cff362da45305

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
i64 euler(i64 x){//求p的欧拉函数
    i64 res=x;
    for(i64 i=2;i<=x/i;i++){
        if(x%i==0){
            res=res-res/i;
            while(x%i==0){
                x/=i;
            }
        }
    }
    if(x>1) res=res-res/x;
    return res;
}
i64 qkpow(i64 a,i64 n,i64 mod){//求快速幂
    i64 res=1;
    while(n){
        if(n&1) res=(res%mod*a%mod)%mod;
        a=(a%mod*a%mod)%mod;
        n>>=1;
    }
    return res;
}
int main(){
    const i64 p = 1e9+7;
    i64 p_euler=euler(p);
    int t;cin>>t;
    while(t--){
        i64 a,b,c;cin>>a>>b>>c;
        //a^n mod p = a^(n mod p的欧拉函数 + p的欧拉函数) mod p
        i64 ans=qkpow(a , qkpow(b,c,p_euler)+p_euler ,p);
        cout<<ans<<'\n';
    }
    return 0;
}

全部评论

相关推荐

01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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