Bsgs模板
Posted yu-shi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bsgs模板相关的知识,希望对你有一定的参考价值。
模板最主要的是自己看得舒服,不会给自己留隐患,调起来比较简单,板子有得是,最主要的是改造出适合你的那一套。 ——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的题为例。
以上是关于Bsgs模板的主要内容,如果未能解决你的问题,请参考以下文章