#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
inline long long read(){
long long res=0;
long long f=1;
char ch;
while((ch=getchar())<'0'||ch>'9')
if(ch=='-')f=-1;
res=ch^48;
while((ch=getchar())<='9'&&ch>='0')
res=(res<<3)+(res<<1)+(ch^48);
return res*f;
}
long long power(long long a,long long b,long long mod){
if(b==0){
return 1%mod;
}
long long ans=1;
while(b){
if(b%2==1){
ans=(ans*a)%mod;
}
a=(a*a)%mod;
b/=2;
}
return ans % mod;
}
long long BSGS(long long a,long long b,long long p){
map <long long , long long> Hash;
Hash.clear();
b%=p;
if(b==1){
return 0;
}
long long t=sqrt(p);
for(long long i=0;i<=t;i++){
Hash[(long long)b*power(a,i,p)%p]=i;
}
a=power(a,t,p);
if(!a){
if(b==0){
return 0;
}
else return -1;
}
for(long long i=1;i<=t;i++){
long long val=power(a,i,p);
long long j=Hash.find((long long)val);//这一行
if(j==Hash.end()){
j = -1;
}
else j=Hash[val];
if(j!=-1&&i*t-j>=0) return i*t-j;
}
return -1;
}
int main(){
long long b,n,p;
p=read(),b=read(),n=read();
long long ans=BSGS(b,n,p);
if(ans==-1){
cout<<"no solution";
}
else{
cout<<ans;
}
}
BSGS模板这道题,54行CE,错误信息为std::map<long long int, long long int>::iterator {aka std::_Rb_tree_iterator<std::pair<const long long int, long long int> >}
怎么改都不对,求教