#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,mod;
map<int,int> mp;
int ksm(int x,int y,int mod){
int ans=1;
while(y){
if(y&1) ans=ans*x%mod;
x=x*x%mod,y>>=1;
}
return ans;
}
void exgcd(int a,int b,int &x,int &y){
if(b==0){
x=1,y=0;
return ;
}
exgcd(b,a%b,x,y);
int xx=x,yy=y;
x=yy,y=xx-a/b*yy;
}
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
int inv(int a,int mod){
int x=0,y=0;
exgcd(a,mod,x,y);
return (x+mod)%mod;
}
int BSGS(int a,int b,int mod){
int B=sqrt(mod)+2,iv=inv(a,mod),ans=1e10;
mp.clear();
for(int i=0,num=b;i<B;i++,num=num*iv%mod){
if(mp.find(num)==mp.end()) mp[num]=i;
}
int T=ksm(a,B,mod);
for(int i=0,num=1;i<=B;i++,num=num*T%mod){
if(mp.find(num)!=mp.end()) ans=min(ans,i*B+mp[num]);
}
return ans;
}
int solve(int a,int b,int mod){
if(mod==1) return 0;
if(b==1) return 0;
if(!a) return (!b)?1:-1;
if(a==b) return 1;
int d=gcd(a,mod);
if(d==1) return BSGS(a,b,mod);
if(b%d) return -1e9;
mod/=d;
return solve(a,b/d*inv(a/d,mod)%mod,mod)+1;
}
signed main(){
freopen("data.in","r",stdin);
while(1){
scanf("%lld%lld%lld",&a,&mod,&b);
if(!a) return 0;
a%=mod,b%=mod;
int ans=solve(a,b,mod);
if(ans<0||ans>mod) printf("No Solution\n");
else printf("%lld\n",ans);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】