[模板]BSGS
1 void insert(int J,int V){ 2 int v=V%sqr; 3 while(hash[v]&&va[v]!=V)v++,v=(v==sqr?0:v); 4 if(!hash[v])hash[v]=1,j[v]=J,va[v]=V; 5 } 6 int find(int V){ 7 int v=V%sqr; 8 while(hash[v]&&va[v]!=V)v++,v=(v==sqr?0:v); 9 if(!hash[v])return -1;return j[v]; 10 } 11 void ex_gcd(int a,int b,int &x,int &y){ 12 if(!b){x=1;y=0;return;} 13 ex_gcd(b,a%b,x,y); 14 int res=x;x=y;y=res-a/b*y; 15 } 16 int BSGS(int a,int b,int c){ 17 int m=ceil(sqrt(c*1.0)),d=1,res=1,x,y; 18 for(int i=0;i<=sqr+9;++i)hash[i]=0; 19 for(int j=0;j<m;++j)insert(j,d),d=d*a%c; 20 for(int i=0;i<m;++i){ 21 ex_gcd(res,c,x,y);x*=b;x=(x%c+c)%c; 22 y=find(x);if(y!=-1)return i*m+y; 23 res=res*d%c; 24 } 25 return -1; 26 }
$Fate \ is \ Fake$

浙公网安备 33010602011771号