AC代码:
#include <iostream>
#include <cstdio>
#include <string.h>
#include <cmath>
#include <map>
typedef long long int lli;
using namespace std;
inline lli qp(lli a,lli x,lli c){
lli ans = 1;
for(;x;x>>=1){
if(x&1) ans = ans*a % c;
a = a*a % c;
}
return ans;
}
lli bsgs(lli a,lli b,lli c){
lli m = ceil(sqrt(c));
map<lli,lli> has;
lli temp = 1;
lli special = b*temp%c;
for(int j = 0;j <= m;j++){
has[b*temp%c] = j;
temp = temp*a %c;
}
temp = qp(a,m,c);
lli ans = temp;
for(int i = 1;i <= m;i++){
if(has[ans]){
ans = (i*m-has[ans]);
printf("%lld\n",(ans%c+c)%c);
return 1;
}
if(ans == special){
ans = (i*m);
printf("%lld\n",(ans%c+c)%c);
return 1;
}
ans = ans * temp % c;
}
return 0;
}
int main()
{
lli c,a,b;
while(~scanf("%lld%lld%lld",&c,&a,&b)){
if(c%a == 0 || !bsgs(a,b,c) ){
printf("no solution\n");
continue;
}
}
return 0;
}