ARC113 B-A^B^C (Euler reduced power)

Title:

Insert picture description here

solution:

显然是计算%10的答案,
但是10不是质数,不能直接用费马小定理,所以得用欧拉降幂.

Insert picture description here

code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=2e5+5;
const int mod=10;
int a[maxm];
int phi(int n){
    
    
    int ans=n;
    for(int i=2;i*i<=n;i++){
    
    
        if(n%i==0){
    
    
            ans=ans/i*(i-1);
            while(n%i==0)n/=i;
        }
    }
    if(n>1)ans=ans/n*(n-1);
    return ans;
}
int mo(int x,int mod){
    
    
    return x<mod?x:x%mod+mod;
}
int ppow(int a,int b,int mod){
    
    
    int ans=mo(1,mod);a=mo(a,mod);
    while(b){
    
    
        if(b&1)ans=mo(ans*a,mod);
        a=mo(a*a,mod);
        b>>=1;
    }
    return ans;
}
int solve(int l,int r,int mod){
    
    
    if(mod==1)return mo(a[l],mod);
    if(l==r)return mo(a[l],mod);
    return ppow(a[l],solve(l+1,r,phi(mod)),mod);
}
signed main(){
    
    
    ios::sync_with_stdio(0);
    for(int i=1;i<=3;i++)cin>>a[i];
    int ans=solve(1,3,mod)%mod;
    cout<<ans<<endl;
    return 0;
}

Guess you like

Origin blog.csdn.net/weixin_44178736/article/details/113926694
Recommended