萌新求助扩展欧拉定理
查看原帖
萌新求助扩展欧拉定理
399150
Shunpower楼主2021/8/23 11:23

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

2021/8/23 11:23
加载中...