题目描述

已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x。

输入

    每个测试文件中最多包含100组测试数据。
    每组数据中,每行包含3个正整数a,p,b。
    当a=p=b=0时,表示测试数据读入完全。

输出

    对于每组数据,输出一行。
    如果无解,输出“No Solution”(不含引号),否则输出最小自然数解。

样例输入

5 58 33
2 4 3
0 0 0

样例输出

9
No Solution

提示

100%的数据,a,p,b≤1e9。

$EXBSGS$模板题,注意特判当$p=1$时输出$0$。

  1. #include<set>
  2. #include<map>
  3. #include<queue>
  4. #include<stack>
  5. #include<cmath>
  6. #include<cstdio>
  7. #include<vector>
  8. #include<bitset>
  9. #include<cstring>
  10. #include<iostream>
  11. #include<algorithm>
  12. #define ll long long
  13. using namespace std;
  14. map<int,int>mp;
  15. ll a,b,p,ans;
  16. inline ll gcd(ll x,ll y)
  17. {
  18. return y==0?x:gcd(y,x%y);
  19. }
  20. inline void exgcd(ll &x,ll &y,ll a,ll b)
  21. {
  22. if(!b)
  23. {
  24. x=1,y=0;
  25. return ;
  26. }
  27. exgcd(y,x,b,a%b);
  28. y-=(a/b)*x;
  29. return ;
  30. }
  31. inline ll quick(ll x,ll y,ll mod)
  32. {
  33. ll res=1ll;
  34. while(y)
  35. {
  36. if(y&1)
  37. {
  38. res=res*x%mod;
  39. }
  40. y>>=1;
  41. x=x*x%mod;
  42. }
  43. return res;
  44. }
  45. inline ll BSGS(ll a,ll b,ll p,ll g)
  46. {
  47. ll x,y;
  48. ll m=ceil(sqrt(p));
  49. exgcd(x,y,g,p);
  50. b=(b*x%p+p)%p;
  51. ll num=quick(a,m,p);
  52. exgcd(x,y,num,p);
  53. num=(x%p+p)%p;
  54. ll sum=1ll;
  55. mp.clear();
  56. for(int i=0;i<=m;i++)
  57. {
  58. if(!mp.count(sum))
  59. {
  60. mp[sum]=i;
  61. }
  62. sum*=a,sum%=p;
  63. }
  64. for(int i=0;i<=m;i++)
  65. {
  66. if(mp[b])
  67. {
  68. return mp[b]+i*m;
  69. }
  70. b*=num,b%=p;
  71. }
  72. return -1;
  73. }
  74. inline int EX_BSGS(int a,int b,int p)
  75. {
  76. ll g=1ll;
  77. ll k=0;
  78. ll d,ans;
  79. if(b==1)
  80. {
  81. return 0;
  82. }
  83. while((d=gcd(a,p))!=1)
  84. {
  85. if(b%d)
  86. {
  87. return -1;
  88. }
  89. k++,b/=d,p/=d,g=g*(a/d)%p;
  90. if(g==b)
  91. {
  92. return k;
  93. }
  94. }
  95. ans=BSGS(a,b,p,g);
  96. return ans==-1?-1:ans+k;
  97. }
  98. int main()
  99. {
  100. while(scanf("%d%d%d",&a,&p,&b))
  101. {
  102. if(!a&&!b&&!p)
  103. {
  104. break;
  105. }
  106. if(p==1)
  107. {
  108. printf("0\n");
  109. continue;
  110. }
  111. ans=EX_BSGS(a,b,p);
  112. printf(ans==-1?"No Solution\n":"%d\n",ans);
  113. }
  114. }

BZOJ2480Spoj3105 Mod&BZOJ1467Pku3243 clever Y——EXBSGS的更多相关文章

  1. 【BZOJ1467/2480】Pku3243 clever Y/Spoj3105 Mod EXBSGS

    [BZOJ1467/2480]Pku3243 clever Y/Spoj3105 Mod Description 已知数a,p,b,求满足a^x≡b(mod p)的最小自然数x. Input      ...

  2. bzoj1467 Pku3243 clever Y

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 313  Solved: 181[Submit][Status ...

  3. 【EX_BSGS】BZOJ1467 Pku3243 clever Y

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 238[Submit][Status ...

  4. luogu2485 [SDOI2011]计算器 poj3243 Clever Y BSGS算法

    BSGS 算法,即 Baby Step,Giant Step 算法.拔山盖世算法. 计算 \(a^x \equiv b \pmod p\). \(p\)为质数时 特判掉 \(a,p\) 不互质的情况. ...

  5. bzoj 1467: Pku3243 clever Y 扩展BSGS

    1467: Pku3243 clever Y Time Limit: 4 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description 小 ...

  6. [拓展Bsgs] Clever - Y

    题目链接 Clever - Y 题意 有同余方程 \(X^Y \equiv K\ (mod\ Z)\),给定\(X\),\(Z\),\(K\),求\(Y\). 解法 如题,是拓展 \(Bsgs\) 板 ...

  7. poj3243 Clever Y[扩展BSGS]

    Clever Y Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8666   Accepted: 2155 Descript ...

  8. MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS

    思路: 前两题题面相同,代码也相同,就只贴一题的题面了.这三题的意思都是求A^X==B(mod P),P可以不是素数,EXBSGS板子题. SPOJ3105题目链接:https://www.spoj. ...

  9. POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)

    不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...

随机推荐

  1. FineUIMvc随笔(3)不能忘却的回发(__doPostBack)

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户反馈 有网友在官方论坛抛出了这么一个问题,似乎对 FineUIMvc 中的浏览器端与服务器端的交互方式很有异议. 这里面的关 ...

  2. Java获取文件Content-Type的四种方法

    HTTP Content-Type在线工具 有时候我们需要获取本地文件的Content-Type,已知 Jdk 自带了三种方式来获取文件类型. 另外还有第三方包 Magic 也提供了API.Magic ...

  3. Asp.Net Core实战(干货)

    序言 使用.NET Core,团队可以更容易专注的在.net core上工作.比如核心类库(如System.Collections)的更改仍然需要与.NET Framework相同的活力,但是ASP. ...

  4. Linux Namespace : UTS

    UTS namespace 用来隔离系统的 hostname 以及 NIS domain name.UTS 据称是 UNIX Time-sharing System 的缩写. hostname 与 N ...

  5. MySQL 5.6中如何定位DDL被阻塞的问题

    在上一篇文章<MySQL 5.7中如何定位DDL被阻塞的问题>中,对于DDL被阻塞问题的定位,我们主要是基于MySQL 5.7新引入的performance_schema.metadata ...

  6. 使用redis实现生产者消费者模式

    本次主要分享一下使用redis做缓存队列,实现生产者消费者模式. 首先先来看一下redis提供的列表操作接口.像ListRightPush就和符合队列先进先出的原则. 然后围绕这个列表已下单为例简要实 ...

  7. pycharm导入自己写的.py文件时,模块下方出现红色波浪线解决

    点击菜单栏的File,选择Setting, 然后,选择需要导入的.py文件“所在的目录",而非项目根目录,右键 之后再导入该.py文件就不会出现红色波浪线了.

  8. PS提亮户外儿童照

    (@摄影师延延)作品 调整完的图. 原图. 再看原图.好吧,这张照片明显欠曝了,蘑菇酱的小脸黑黑的.但是构图啊蘑菇酱的神情啊都不错捏.好在蘑菇妈是用raw格式拍,即刻Lightroom调整无压力. 1 ...

  9. WebSocket实现一个聊天室

    聊天室页面-->index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

  10. JavaScript中防止重复提交

    有这么一种情况: 页面有一个按钮,点击之后会触发Ajax请求,但是用户在点击之后,不知道是否点成功了,于是又点了一下,如果不加处理的话,就会进行两次Ajax请求,并且请求的数据都是一样的,对后端的程序 ...