玄关求掉
查看原帖
玄关求掉
547238
篮网总冠军楼主2025/5/30 22:51
#include <bits/stdc++.h>
using namespace std;

long long p;
map<long long,bool>mp;
long long ksm(long long x,long long y){
	long long ans=1;
	while(y){
		if (y%2==1) ans=ans*x%p;
		x=x*x%p;
		y=y/2;
	}
	return ans;
}
int main(){
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	long long a,b;
	cin>>p>>a>>b;
	if (1%p==b%p){
		cout<<0<<endl;
		return 0;
	}
	long long q=ceil(sqrt(p)),rt=b%p;
	for(int i=0;i<q;i++){
		mp[b*rt%p]=i;
		rt=(rt*a)%p;
	}
	long long ut=ksm(a,q);
	long long val=ut;
	for(int i=1;i<=q;i++){
		if (mp[val]){
			cout<<i*q-mp[val]<<endl;
			return 0;
		}
		val=val*ut%p;
	}
	cout<<"no solution"<<endl;
	return 0;
}
2025/5/30 22:51
加载中...