RT,WA 了十个,MLE 了两个,只有三个 AC。
#include <bits/stdc++.h>
using namespace std;
int ans;
int a,m,b,p;
bool ok;
int split(int x){
int k=x;
ans=x;
for(int i=2;i*i<=k;i++){
if(x%i==0){
ans*=(i-1);
ans/=i;
while(x%i==0){
x/=i;
}
}
}
if(x>1){
ans-=ans/x;
}
return ans;
}
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
w=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
if(s>=p){
ok=true;
}
s%=p;
ch=getchar();
}
return s*w;
}
long long int qpow(int b,int p,int k){
if(p==0) return 1%k;
if(p%2==0){
long long l=qpow(b,p/2,k);
return l*l%k;
}
else{
long long m=qpow(b,(p-1)/2,k);
return b%k*m*m%k;
}
}
int main(){
cin>>a>>m;
p=split(m);
b=read();
if(ok){
cout<<qpow(a,b+p,m)<<endl;
}
else{
cout<<qpow(a,b,m)<<endl;
}
return 0;
}
求 dalao 指出错误 QWQ