#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<stack>
#include<vector>
#include<map>
#include<set>
#define ll long long
using namespace std;
ll ksm(ll b,ll p, ll k){
if(p==0)return 1%k;
ll ans=1;
while(p>0){
if(p&1){
ans*=b;
ans%=k;
}
b*=b;
b%=k;
p>>=1;
}
return ans%k;
}
ll solve(ll a,ll b,ll p){
ll s=sqrt(p);
set<ll> se;
ll ans=1;
for(int i=0;i<s;i++){
se.insert(ans);
ans=1ll*ans*a%p;
}
ans=ksm(ans,p-2,p);
ll c=b;
for(int i=0;i<p-1;i+=s){
if(se.count(c)!=0){
ll v=ksm(a,i,p);
while(v!=b){
v=v*a%p;
i++;
}
return i;
}
c=c*ans%p;
}
return -1;
}
signed main(void)
{
ll b,n;
ll p;
scanf("%lld%lld%lld",&p,&b,&n);
ll ans=solve(b,n,p);
if(ans==-1)printf("no solution");
else printf("%lld",ans);
return 0;
}
提交记录