四种颜色求调
查看原帖
四种颜色求调
534025
gmllsswzw楼主2022/11/17 14:02
#include<bits/stdc++.h>
using namespace std;
int a,m,d,t,tt,lena;
string b;
int phi(int m){//计算欧拉函数 
	int ans=m;
	for(int i=2;i<=sqrt(m);i++){
		if(m%i==0){
			ans=ans*(i-1)/i;
			while(m%i==0) m/=i;
		}
	}
	if(m>1)	ans=ans*(m-1)/m;
	return ans;
}
int power(int a,int b,int p){//快速幂 
	int base=a,ans=1;
	while(b){
		if(b&1)	ans=(long long)ans*base%p;
		base=(long long)base*base%p;
		b>>=1;
	}
	return ans;
}
bool test(int a,string b){//判断b是否大于φ(m) 
	int bb,ba=1;
	while(a){
		lena++;
		a>>=1;
	}
	if(b.length()>lena)	return 1;
	else if(b.length()<lena)	return 0;
	else{
		for(int i=b.length();i;i--){
			bb+=(b[i-1]-'0')*ba;
			ba*=10;
		}
		if(bb>a)	return 1;
		else return 0;
	}
}
int main(){
	cin>>a>>m>>b;
	t=phi(m);
	if(test(t,b)){
		for(int i=0;i<b.length();i++){
			d=(d*10+(b[i]-'0'))%t;
		}
		t+=d;
		cout<<power(a,t,m);
	}
	else{
		int bb,ba=1;
		for(int i=b.length();i;i--){
			bb+=(b[i-1]-'0')*ba;
			ba*=10;
		}
		cout<<power(a,bb,m);
	}
	return 0;
}
2022/11/17 14:02
加载中...