标签:sig close def hid show first mda turn splay
模板最主要的是自己看得舒服,不会给自己留隐患,调起来比较简单,板子有得是,最主要的是改造出适合你的那一套。 ——mzz
#include<bits/stdc++.h> #define int long long using namespace std; const int mod=13331; struct Hash_Tablet{ int val,nex,id; }edge[mod<<2];int first[mod<<2],num; int a,b,c,ans; void init(){ memset(first,0,sizeof(first)); num=0; } void insert(int val,int j){ int Hval=val%mod; edge[++num].val=val; edge[num].id=j; edge[num].nex=first[Hval]; first[Hval]=num; } int find(int val){ int Hval=val%mod; for(int i=first[Hval];i;i=edge[i].nex) if(edge[i].val==val) return edge[i].id; return -1; } int Bsgs(int a,int b,int c){ init(); if(b==1) return 0; int m=ceil(sqrt(c*1.0)); int j,p=1,x=1; for(int i=0;i<m;i++,p=p*a%c) insert(p*b%c,i); for(int i=m;i<=c+m;i+=m){ if((j=find(x=x*p%c))!=-1) return i-j; }return -1; } signed main(){ while(~scanf("%lld%lld%lld",&c,&a,&b)){ ans=Bsgs(a%c,b%c,c); ans==-1?puts("no solution"):printf("%lld\n",ans); }return 0; }
以一道叫Discrete Logging的题为例。
标签:sig close def hid show first mda turn splay
原文地址:https://www.cnblogs.com/Yu-shi/p/11235540.html