https://www.luogu.org/problemnew/show/P4861

把好像把一开始b==1的特判去掉就可以AC了。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. inline int gcd(int a,int b){
  5. if(!b)
  6. return a;
  7. else{
  8. while(int i=a%b){
  9. a=b;
  10. b=i;
  11. }
  12. return b;
  13. }
  14. }
  15. inline int qpow(ll a,int n,int m) {
  16. //这个快速幂保证p不是1,少模一次是一次
  17. ll s=1;
  18. while(n) {
  19. if(n&1)
  20. s=s*a%m;
  21. a=a*a%m;
  22. n>>=1;
  23. }
  24. return s;
  25. }
  26. unordered_map<int,int> M;
  27. //要求a,n互质 a^x=b mod n .k,t是留给exbsgs调用的
  28. int bsgs(int a,int b,int n,int k=1,int t=0) {
  29. /*if(b==1)
  30. return 0;*/
  31. M.clear();
  32. int m=ceil(sqrt(n));
  33. ll s=b;//BS
  34. for(int i=0; i<m; i++,s=s*a%n)
  35. M[s]=i;
  36. s=k;//GS
  37. k=qpow(a,m,n);
  38. for(ll i=1; i<=m; i++) {
  39. s=s*k%n;
  40. if(M.count(s))
  41. return i*m-M[s]+t; //貌似这样就保证找到的是最小解了,不知道为什么
  42. }
  43. return -1;
  44. }
  45. //a^x=b mod n
  46. int exbsgs(int a,int b,int n) {
  47. /*if(b==1) {
  48. return 0;
  49. }*/
  50. int d=gcd(a,n),k=1,t=0;
  51. while(d^1) {
  52. if(b%d) {
  53. return -1;
  54. }
  55. ++t;
  56. b/=d;
  57. n/=d;
  58. k=(ll)k*(a/d)%n;
  59. if(b==k) {
  60. return t;
  61. }
  62. d=gcd(a,n);
  63. }
  64. return bsgs(a,b,n,k,t);
  65. }
  66. int main() {
  67. #ifdef Yinku
  68. freopen("Yinku.in","r",stdin);
  69. #endif // Yinku
  70. int a,b,n;
  71. int m,k;
  72. b=1;
  73. scanf("%d%d",&m,&k);
  74. a=k;
  75. n=m;
  76. a%=n;
  77. b%=n;
  78. int ans=exbsgs(a,b,n);
  79. if(ans==-1)
  80. puts("Let's go Blue Jays!");
  81. else
  82. printf("%d\n",ans);
  83. return 0;
  84. }

洛谷 - P4861 - 按钮 - 扩展大步小步算法的更多相关文章

  1. 离散对数&&大步小步算法及扩展

    bsgs algorithm ax≡b(mod n) 大步小步算法,这个算法有一定的局限性,只有当gcd(a,m)=1时才可以用 原理 此处讨论n为素数的时候. ax≡b(mod n)(n为素数) 由 ...

  2. 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...

  3. [模板]大步小步算法——BSGS算法

    大步小步算法用于解决:已知A, B, C,求X使得 A^x = B (mod C) 成立. 我们令x = im - j | m = ceil(sqrt(C)), i = [1, m], j = [0, ...

  4. 洛谷 P3805 【模板】manacher算法

    洛谷 P3805 [模板]manacher算法 洛谷传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入格式 一行小写英文字符 ...

  5. 离散对数及其拓展 大步小步算法 BSGS

    离散对数及其拓展 离散对数是在群Zp∗Z_{p}^{*}Zp∗​而言的,其中ppp是素数.即在在群Zp∗Z_{p}^{*}Zp∗​内,aaa是生成元,求关于xxx的方程ax=ba^x=bax=b的解, ...

  6. 洛谷P4581 [BJOI2014]想法(玄学算法,拓扑排序)

    洛谷题目传送门 萝卜大毒瘤 题意可以简化成这样:给一个DAG,求每个点能够从多少个入度为\(0\)的点到达(记为\(k\)). 一个随机做法:给每个入度为\(0\)的点随机一个权值,在DAG上求出每个 ...

  7. 大步小步算法模板题, poj2417

    大步小步模板 (hash稍微有一点麻烦, poj不支持C++11略坑) #include <iostream> #include <vector> #include <c ...

  8. BSGS-Junior·大步小步算法

    本文原载于:http://www.orchidany.cf/2019/02/06/BSGS-junior/#more \(\rm{0x01}\) \(\mathcal{Preface}\) \(\rm ...

  9. 洛谷 P3805【模板】manacher算法

    题目链接:https://www.luogu.com.cn/problem/P3805 Manacher算法$O(n)$: 求以每个字符为中心的最长回文串的半径:如果要求可以以字符间隙为回文中心,就要 ...

随机推荐

  1. VS + Qt5Designer + Anaconda环境配置

    最近打算做一个模型训练工具,从来都不喜欢做UI的我,最终把目光放在了QtDesigner上.配环境的过程中在网上翻阅了不少博客,但大多是pycharm或者是VScode,使用VS的似乎不多.所以打算记 ...

  2. A20 烧录和启动 log

    用 LiveSuit 烧写了一个 lubuntu 的映像文件到板子上, 同时接了串口观察烧录过程的串口打印信息, 如下 ES: FES:Fes Ver: 098 FES:=============== ...

  3. python中if __name__ == '__main__': 的解析(转载)

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  4. wince c# 创建桌面快捷方式 自动启动 只运行一次 全屏显示

    using System; using System.Linq; using System.Collections.Generic; using System.Text; using System.R ...

  5. 【BZOJ1483】[HNOI2009]梦幻布丁 链表+启发式合并

    [BZOJ1483][HNOI2009]梦幻布丁 Description N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2 ...

  6. EasyDarwin幼教云视频平台在幼教平台领域大放异彩!

    在之前的一篇方案<基于EasyDarwin云视频平台的幼儿园视频直播(手机直播/微信直播)解决方案>中,我们提到一种可以广泛应用于幼教.工厂.建筑工地以及各种现场监控的云视频平台方案,这种 ...

  7. EasyHLS实现将IPCamera摄像机的RTSP流转成HLS(ts+m3u8)直播输出

    本文转自:http://www.cnblogs.com/babosa/p/6033039.html EasyHLS EasyHLS是EasyDarwin开源流媒体团队开发的一款HLS打包库,接口非常简 ...

  8. spawn类expect方法详解

    本文我们将介绍spawn类的基本方法expect方法,这个方法是用来匹配返回的结果,这个返回的结果是指子程序的返回结果,同时会将匹配的相关信息保存在spawn类的相关属性中. 基本属性包括三个,第一个 ...

  9. javase练习题--每天写写

    package com.javaTestDemo; import java.util.Scanner; public class JavaTest1 { public static void main ...

  10. source insight 快捷键

    source insight 返回上一视图 快捷键:ALT+, 浏览项目符号:F7 全局浏览查找某个名称开头的函数或结构体等