原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2480.html

题目传送门 - BZOJ2480

题意

  已知数 $a,p,b$ ,求满足 $a^x≡b \pmod p $ 的最小自然数 $x$ 。

  $a,p,b\leq 10^9$ 

题解

  ExBSGS模板题。

UPD(2018-09-10):

  详见数论总结。

  传送门 - https://www.cnblogs.com/zhouzhendong/p/Number-theory-Residue-System.html

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a,p,b;
  4. int Pow(int x,int y,int mod){
  5. int ans=1;
  6. for (;y;y>>=1,x=1LL*x*x%mod)
  7. if (y&1)
  8. ans=1LL*ans*x%mod;
  9. return ans;
  10. }
  11. int gcd(int x,int y){
  12. return y?gcd(y,x%y):x;
  13. }
  14. struct hash_map{
  15. static const int Ti=233,mod=1<<16;
  16. int cnt,k[mod+1],v[mod+1],nxt[mod+1],fst[mod+1];
  17. int Hash(int x){
  18. int v=x&(mod-1);
  19. return v==0?mod:v;
  20. }
  21. void clear(){
  22. cnt=0;
  23. memset(fst,0,sizeof fst);
  24. }
  25. void update(int x,int a){
  26. int y=Hash(x);
  27. for (int p=fst[y];p;p=nxt[p])
  28. if (k[p]==x){
  29. v[p]=a;
  30. return;
  31. }
  32. k[++cnt]=x,nxt[cnt]=fst[y],fst[y]=cnt,v[cnt]=a;
  33. return;
  34. }
  35. int find(int x){
  36. int y=Hash(x);
  37. for (int p=fst[y];p;p=nxt[p])
  38. if (k[p]==x)
  39. return v[p];
  40. return 0;
  41. }
  42. int &operator [] (int x){
  43. int y=Hash(x);
  44. for (int p=fst[y];p;p=nxt[p])
  45. if (k[p]==x)
  46. return v[p];
  47. k[++cnt]=x,nxt[cnt]=fst[y],fst[y]=cnt;
  48. return v[cnt]=0;
  49. }
  50. }Map;
  51. int ExBSGS(int A,int B,int P){
  52. A%=P,B%=P;
  53. int k=0,v=1;
  54. while (1){
  55. int g=gcd(A,P);
  56. if (g==1)
  57. break;
  58. if (B%g)
  59. return -1;
  60. k++,B/=g,P/=g,v=1LL*v*(A/g)%P;
  61. if (v==B)
  62. return k;
  63. }
  64. if (P==1)
  65. return k;
  66. int M=max((int)sqrt(1.0*P),1),AM=Pow(A,M,P);
  67. Map.clear();
  68. for (int b=0,pw=B;b<M;b+=1,pw=1LL*pw*A%P)
  69. Map.update(pw,b+1);
  70. for (int a=M,pw=1LL*v*AM%P;a-M<P;a+=M,pw=1LL*pw*AM%P){
  71. int v=Map.find(pw);
  72. if (v)
  73. return a-(v-1)+k;
  74. }
  75. return -1;
  76. }
  77. int main(){
  78. while (~scanf("%d%d%d",&a,&p,&b)&&(a||b||p)){
  79. int ans=ExBSGS(a,b,p);
  80. if (~ans)
  81. printf("%d\n",ans);
  82. else
  83. puts("No Solution");
  84. }
  85. return 0;
  86. }

  

BZOJ2480 Spoj3105 Mod 数论 扩展BSGS的更多相关文章

  1. BZOJ2480 Spoj3105 Mod

    乍一看题面:$$a^x \equiv b \ (mod \ m)$$ 是一道BSGS,但是很可惜$m$不是质数,而且$(m, a) \not= 1$,这个叫扩展BSGS[额...... 于是我们需要通 ...

  2. BSGS 扩展大步小步法解决离散对数问题 (BZOJ 3239: Discrete Logging// 2480: Spoj3105 Mod)

    我先转为敬? orz% miskcoo 贴板子 BZOJ 3239: Discrete Logging//2480: Spoj3105 Mod(两道题输入不同,我这里只贴了3239的代码) CODE ...

  3. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)

    哎呀大水题..我写了一个多小时..好没救啊.. 数论板子X合一? 注意: 本文中变量名称区分大小写. 题意: 给一个\(n\)阶递推序列\(f_k=\prod^{n}_{i=1} f_{k-i}b_i ...

  4. 【bzoj2480】Spoj3105 Mod

    2480: Spoj3105 Mod Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 557  Solved: 210[Submit][Status][ ...

  5. BSGS及扩展BSGS总结(BSGS,map)

    蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...

  6. BSGS与扩展BSGS

    BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...

  7. 【模板】exBSGS/Spoj3105 Mod

    [模板]exBSGS/Spoj3105 Mod 题目描述 已知数\(a,p,b\),求满足\(a^x\equiv b \pmod p\)的最小自然数\(x\). 输入输出格式 输入格式: 每个测试文件 ...

  8. bzoj 3283 扩展BSGS + 快速阶乘

    T2  扩展BSGS T3 快速阶乘 给定整数n,质数p和正整数c,求整数s和b,满足n! / pb = s mod pc 考虑每次取出floor(n/p)个p因子,然后将问题转化为子问题. /*** ...

  9. BSGS和扩展BSGS

    BSGS: 求合法的\(x\)使得\(a ^ x \quad mod \quad p = b\) 先暴力预处理出\(a^0,a^1,a^2.....a^{\sqrt{p}}\) 然后把这些都存在map ...

随机推荐

  1. 使用mysql自带工具mysqldump进行全库备份以及source命令恢复数据库

    mysql数据库提供了一个很好用的工具mysqldump用以备份数据库,下面将使用mysqldump命令进行备份所有数据库以及指定数据库 一.mysqldump一次性备份所有数据库数据 /usr/lo ...

  2. Mysql 的安装(压缩文件)和基本管理

    MySql安装和基本管理   本节掌握内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle ...

  3. Python装饰器执行顺序详解

    探究多个装饰器执行顺序 装饰器是Python用于封装函数或代码的工具,网上可以搜到很多文章可以学习,我在这里要讨论的是多个装饰器执行顺序的一个迷思. 疑问 大部分涉及多个装饰器装饰的函数调用顺序时都会 ...

  4. hashtable——散列表

    2018-11-01 散列表---哈希表基于快速存取,时间换空间一种基于线性数组的线性表,不过元素之间并非紧密排列 散列函数--通过函数,有key关键码计算地址(相当于数组下标),函数尽可能使元素均匀 ...

  5. mvn tomcat7:help的14个命令

    D:\2018\code\XXX>mvn tomcat7:help [INFO] Scanning for projects... [INFO] [INFO] ----------------- ...

  6. Es6对象的扩展和Class类的基础知识笔记

    /*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...

  7. 深入分析Zookeeper的实现原理

    zookeeper 的由来 分布式系统的很多难题,都是由于缺少协调机制造成的.在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper.Google ...

  8. C#关于线程的问题

    1.通过System.threading.Thread类可以创建新的线程,并在线程堆栈中运行静态和动态的实例,可以通过Thread类的构造方法传递一个无参数,并且不返回的委托, class Progr ...

  9. hdu2871 区间合并(类似poj3667)+vector应用

    用vector进行插入和删除操作! 总是有些地方处理不好,对拍了才知道错在哪里,, /* 给定一些操作 reset 清空 new a ,申请最左边的连续a个空间 free a,清空a所在的块 get ...

  10. spfa+01 规划

    尼玛的哪里错了.. /* 在有向图上找一个环,使结点权值和/边权和的比例值最大 01规划,设比例为l,那么将每条边的权值改成a[u]-l*w,如果有正权环,则比例l可行 如何判图中存在正权环?将 权值 ...