萌新求助
查看原帖
萌新求助
319836
untrigintillion楼主2022/3/16 20:55

为什么过不去?

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll t(ll m,string k){
    ll ans=0;
    for(int i=0;i<k.length();i++){
        ans*=10;
        ans+=k[i]-'0';
        ans%=m;
    }
    return ans;
}
long long phi(long long a){
    long long q=a,r=a;
    for(int i=2;i<=sqrt(r)+1;i++){
        if(a%i==0){
            q/=i;
            q*=(i-1);
            while(a%i==0){
                a/=i;
            }
        }
    }
    if(a>1){
    	q/=a;
    	q*=(a-1);
	}
//    cout<<q<<endl;
    return q;
}
int main(){
    string a,r;
    long long c;
    cin>>a>>r>>c;
    long long b=t(c,a),n=t(phi(c),r)-1;
    n+=phi(c);
    if(b==0)cout<<c;
    else{
        long long ans=b-1;
        while(n>0){
            if(n%2==1){
                ans*=b;
                ans%=c;
            }
            b*=b;
            b%=c;
            n/=2;
        }
        if(ans!=0)cout<<ans;
        else cout<<c;
    }
    return 0;
}
2022/3/16 20:55
加载中...