题解

BSGS直接解出a和b来即可

代码

  1. #include <bits/stdc++.h>
  2. #define fi first
  3. #define se second
  4. #define pii pair<int, int>
  5. #define pdi pair<db, int>
  6. #define mp make_pair
  7. #define pb push_back
  8. #define enter putchar('\n')
  9. #define space putchar(' ')
  10. #define eps 1e-8
  11. #define mo 974711
  12. #define MAXN 1000005
  13. //#define ivorysi
  14. using namespace std;
  15. typedef long long int64;
  16. typedef double db;
  17. template <class T>
  18. void read(T &res) {
  19. res = 0;
  20. char c = getchar();
  21. T f = 1;
  22. while (c < '0' || c > '9') {
  23. if (c == '-') f = -1;
  24. c = getchar();
  25. }
  26. while (c >= '0' && c <= '9') {
  27. res = res * 10 + c - '0';
  28. c = getchar();
  29. }
  30. res *= f;
  31. }
  32. template <class T>
  33. void out(T x) {
  34. if (x < 0) {
  35. x = -x;
  36. putchar('-');
  37. }
  38. if (x >= 10) {
  39. out(x / 10);
  40. }
  41. putchar('0' + x % 10);
  42. }
  43. int P, g, S;
  44. int inc(int a, int b) { return a + b >= P ? a + b - P : a + b; }
  45. int mul(int a, int b) { return 1LL * a * b % P; }
  46. int fpow(int x, int64 c) {
  47. int res = 1, t = x;
  48. while (c) {
  49. if (c & 1) res = mul(res, t);
  50. t = mul(t, t);
  51. c >>= 1;
  52. }
  53. return res;
  54. }
  55. struct node {
  56. int x, p, next;
  57. } E[100005];
  58. int head[mo + 5], sumE;
  59. void add(int x, int p) {
  60. int u = x % mo;
  61. E[++sumE].next = head[u];
  62. E[sumE].x = x;
  63. E[sumE].p = p;
  64. head[u] = sumE;
  65. }
  66. int Query(int x) {
  67. int u = x % mo;
  68. for (int i = head[u]; i; i = E[i].next) {
  69. if (E[i].x == x) return E[i].p;
  70. }
  71. return -1;
  72. }
  73. int64 BSGS(int A, int C) {
  74. sumE = 0;
  75. memset(head, 0, sizeof(head));
  76. int t = 1;
  77. for (int i = 0; i < S; ++i) {
  78. if (t == C) return i;
  79. add(mul(t, C), i);
  80. t = mul(t, A);
  81. }
  82. int h = t;
  83. for (int i = 1;; ++i) {
  84. int x = Query(h);
  85. if (x != -1) return 1LL * i * S - x;
  86. h = mul(h, t);
  87. if (i > P / S) break;
  88. }
  89. }
  90. void Solve() {
  91. int A, B;
  92. read(A);
  93. read(B);
  94. int64 a = BSGS(g, A), b = BSGS(g, B);
  95. out(fpow(g, a * b % (P - 1)));
  96. enter;
  97. }
  98. int main() {
  99. #ifdef ivorysi
  100. freopen("f1.in", "r", stdin);
  101. #endif
  102. read(g);
  103. read(P);
  104. S = sqrt(P);
  105. int T;
  106. read(T);
  107. while (T--) {
  108. Solve();
  109. }
  110. return 0;
  111. }

【LOJ】#2531. 「CQOI2018」破解 D-H 协议的更多相关文章

  1. loj#2531. 「CQOI2018」破解 D-H 协议(BSGS)

    题意 题目链接 Sol 搞个BSGS板子出题人也是很棒棒哦 #include<bits/stdc++.h> #define Pair pair<int, int> #defin ...

  2. Loj #2192. 「SHOI2014」概率充电器

    Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...

  3. Loj #3096. 「SNOI2019」数论

    Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...

  4. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  5. Loj #3089. 「BJOI2019」奥术神杖

    Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...

  6. Loj #2542. 「PKUWC2018」随机游走

    Loj #2542. 「PKUWC2018」随机游走 题目描述 给定一棵 \(n\) 个结点的树,你从点 \(x\) 出发,每次等概率随机选择一条与所在点相邻的边走过去. 有 \(Q\) 次询问,每次 ...

  7. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

  8. Loj #3056. 「HNOI2019」多边形

    Loj #3056. 「HNOI2019」多边形 小 R 与小 W 在玩游戏. 他们有一个边数为 \(n\) 的凸多边形,其顶点沿逆时针方向标号依次为 \(1,2,3, \ldots , n\).最开 ...

  9. Loj #3055. 「HNOI2019」JOJO

    Loj #3055. 「HNOI2019」JOJO JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 ...

随机推荐

  1. 【BZOJ1082】[SCOI2005]栅栏(搜索)

    [BZOJ1082][SCOI2005]栅栏(搜索) 题面 BZOJ 洛谷 题解 随便写个爆搜,洛谷上就\(80\)分了.先放爆搜代码: #include<iostream> #inclu ...

  2. Github Desktop 克隆仓库一直出现“Authentication failed”

    如图所示: 解决方法: 使用ssh链接下载而不是https

  3. 各种蕴含算法思想的DP - 3

    内容中包含 base64string 图片造成字符过多,拒绝显示

  4. NameError: name 'reload' is not defined

    对于 Python 2.X: import sys reload(sys) sys.setdefaultencoding("utf-8") 对于 <= Python 3.3: ...

  5. python 基础 元组()

    # 元组 应用场景 # 尽管 Python的列表中可以存储不同类型的数据 # 但是在开发中,更多的应用场景是 # 1.列表存储相同类型的数据 # 2.通过迭代遍历,在循环体内部,针对列表中的每一项元素 ...

  6. [转载]Juicer – 一个Javascript模板引擎的实现和优化

    http://ued.taobao.org/blog/2012/04/juicer-%E4%B8%80%E4%B8%AAjavascript%E6%A8%A1%E6%9D%BF%E5%BC%95%E6 ...

  7. 20155227 2016-2017-2 《Java程序设计》第八周学习总结

    20155227 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 NIO即New IO.java从JDK1.4开始提供了NIO,在JAVA ...

  8. iframe引入网页

    <!DOCTYPE html> <html> <body> <iframe src="/example/html/demo_iframe.html& ...

  9. 问题:经典类的对象明明没有__class__属性,却可以调用。

    这个问题得深入python源码才能看. class a: pass aa =a() print dir(aa)#aa只有doc和module属性 print aa.__class__#__main__ ...

  10. 【CTF WEB】服务端请求伪造

    服务端请求伪造 如你所愿,这次可以读取所有的图片,但是域名必须是www开头 测试方法 POST /index.php HTTP/1.1 Host: 218.2.197.236:27375 Conten ...