[BZOJ1467]Pku3243 clever Y(扩展BSGS)
来源:互联网 发布:犀牛o2o源码 编辑:程序博客网 时间:2024/06/10 00:40
题目描述
传送门
题解
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<map>using namespace std;#define LL long longLL a,b,P;map <LL,LL> hash;LL gcd(LL a,LL b){ if (!b) return a; else return gcd(b,a%b);}LL fast_pow(LL a,LL p){ LL ans=1LL; for (;p;p>>=1LL,a=a*a%P) if (p&1LL) ans=ans*a%P; return ans;}LL exbsgs(LL a,LL b,LL P){ if (b==1LL) return 0LL; LL t=1LL,d=1LL,k=0LL; while ((t=gcd(a,P))!=1LL) { if (b%t) return -1LL; ++k,b/=t,P/=t,d=d*(a/t)%P; if (b==d) return k; } hash.clear(); LL m=ceil(sqrt(P));LL a_m=fast_pow(a,m); LL mul=b; for (LL j=1;j<=m;++j) { mul=mul*a%P; hash[mul]=j; } for (LL i=1;i<=m;++i) { d=d*a_m%P; if (hash[d]) return i*m-hash[d]+k; } return -1LL;}int main(){ while (~scanf("%lld%lld%lld",&a,&P,&b)) { if (!a&&!P&&!b) break; LL ans=exbsgs(a%P,b%P,P); if (ans!=-1LL) printf("%lld\n",ans); else puts("No Solution"); }}
总结
抽空学一下手写hash
1 0
- [BZOJ1467]Pku3243 clever Y(扩展BSGS)
- bzoj1467: Pku3243 clever Y
- bzoj 1467: Pku3243 clever Y (扩展BSGS)
- 【bzoj 1467】Pku3243 clever Y(扩展BSGS)
- [BZOJ 1467]Pku3243 clever Y:扩展BSGS
- 1467: Pku3243 clever Y
- poj3243:Clever Y(BSGS)
- BZOJ_P1467/POJ_P3243 Clever Y(扩展BSGS+哈希)
- BZOJ 1467 1467: Pku3243 clever Y (exBSGS)
- BZOJ 1467 Pku3243 clever Y EXBSGS
- POJ 3243 Clever Y BSGS
- POJ 3243:Clever Y BSGS
- poj3243 Clever Y【BSGS模板】
- POJ 3243 Clever Y BSGS 算法 (模板)
- POJ 3243 Clever Y(扩展BSGS,gcd(a,p)!=1)
- 【EXT-BSGS算法求离散对数】POJ Clever Y 3243
- 【BSGS】POJ2417[Discrete Logging]&POJ3243[Clever Y]题解
- poj 3243 Clever Y&&hdu 2815 Mod Tree(扩展baby_step)
- ACM2-1002
- JS闭包及内存泄露
- 易语言学习第十一课
- CString用法
- 有符号十六进制转十进制 c++
- [BZOJ1467]Pku3243 clever Y(扩展BSGS)
- 字符串反转引发的char str[]="abc"和char *str="abc"思考
- $(document).ready()
- OpenCv学习笔记---OpenCv中支持向量机模块SVM------源代码分析
- 隐形变量赋值,隐藏参数,隐藏传参
- 2016sdau课程练习专题二 1020
- 345. Reverse Vowels of a String 【E】
- mysql一些实用的语句
- DayDayUP_Linux运维学习_oracle11g安装教程