bsgs问题 或 poj2417:

给定质数\(p\),给定\(a\),\(b\),\((a,p)=1\)

求出最小的整数x,使得\(a^{x}≡b(mod p)\)

概述

由费马小定理可以知道

\(a^{x+p-1}≡a^{x}≡b(mod p)\)

所以如果有解那\([0,p-1]\)区间内一定会出现解

让\(m=sqrt(p)\)

\(x\)可以表示为\(m*i-j\)

那\(m,i,j\)都是在根号规模的

\(a^{m*i-j}≡b(mod p)\)

\(\frac{a^{m*i}}{a^{j}}≡b(mod p)\)

\(a^{m*i}≡b*a^{j}(mod p)\)

右边\(hash\)表(一般都用stl的map)存在所有的j取值

左边暴力枚举i(因为是-j,所以从1枚举,要不然就成负数了,找出来的就不一定是最小解)

如果\(a^{m*i}\)在hash表中存在,那就有解,也是最小解,结束吧

如果根号范围内还没有解,那就真的没解

算法思想:分块

算法缺陷:p是质数

算法复杂度\(\sqrt{n}\)

\(map\)常数也许很高

代码

  1. #include <iostream>
  2. #include <cmath>
  3. #include <map>
  4. #include <cstdio>
  5. #define ll long long
  6. using namespace std;
  7. ll a,b,p;
  8. map<ll,ll> hasH;
  9. int main() {
  10. while(scanf("%lld%lld%lld",&p,&a,&b)!=EOF) {
  11. ll m=floor(sqrt(p));
  12. hasH.clear();
  13. ll tmp=1;
  14. hasH[b]=1;
  15. for(ll i=1;i<=m;++i) tmp=tmp*a%p,hasH[tmp*b%p]=i+1;
  16. ll xx=tmp,i=1,ans=-1;
  17. for(;i<=m;++i) {
  18. if(hasH[xx]) {ans=m*i%p-(hasH[xx]-1);break;}
  19. xx=xx*tmp%p;
  20. }
  21. if(ans==-1) puts("no solution");
  22. else printf("%d\n",ans);
  23. }
  24. return 0;
  25. }

exbsgs

咕咕咕咕

鸣谢 \(gzy gzy gzy\)

bsgs整理的更多相关文章

  1. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  2. [OI]省选前模板整理

    省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int ...

  3. 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

    数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...

  4. OI题目类型总结整理

    ## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...

  5. 数学:拓展BSGS

    当C不是素数的时候,之前介绍的BSGS就行不通了,需要用到拓展BSGS算法 方法转自https://blog.csdn.net/zzkksunboy/article/details/73162229 ...

  6. [BSGS]大步小步算法

    问题 BSGS被用于求解离散对数,即同余方程: \[ A^x\equiv B\pmod{P} \] 求\(x\)的最小非负整数解. 保证\(A\perp P\)(互质). 分析 首先,我们根据费马小定 ...

  7. cyyz : Day 1 数论整理

    声明:感谢修改这篇博客的dsr Day 1 先说一下上午的听课吧,哎~,简直了,简直(⊙o⊙)…咋说呢,引人入胜???No! 是昏昏欲睡好吧...一点听课欲都没有(强撑....),一上午停下来简直怀疑 ...

  8. 【学习笔记】OI模板整理

    CSP2019前夕整理一下模板,顺便供之后使用 0. 非算法内容 0.1. 读入优化 描述: 使用getchar()实现的读入优化. 代码: inline int read() { int x=0; ...

  9. ACM算法模板整理

    史诗级ACM模板整理 基本语法 字符串函数 istream& getline (char* s, streamsize n ); istream& getline (char* s, ...

随机推荐

  1. MySQL编码问题探究

    占个坑. 今天在向本机搭建的MySQL数据库插入中文的时候报错了. 使用 show variables like 'char%'; 及 show variables like 'collation%' ...

  2. python爬虫 ----文章爬虫(合理处理字符串中的\n\t\r........)

    import urllib.request import re import time num=input("输入日期(20150101000):") def openpage(u ...

  3. Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关

    Oracle10g 连接 sqlserver hsodbc dblink 方式 非透明网关 那个上传图片太麻烦了,发布到百度文库了 http://wenku.baidu.com/view/b38ae8 ...

  4. poj1222 高斯消元

    给了一个01矩阵然后选在一个点1变0或者0变1 然后 与他相邻的 数也相应的变成相反的数,问最后求出一种方案把他们变成全0 将每一个位置上的状态看做一个变元,30个变元,列出30个异或方程 #incl ...

  5. Another Meaning (KMP + DP)

    先用KMP重叠匹配求出各个匹配成功的尾串位置.然后利用DP去求,那转移方程应该是等于 上一个状态 (无法匹配新尾巴) 上一个状态 + 以本次匹配起点为结尾的状态(就是说有了新的位置) + 1 (单单一 ...

  6. SLAM学习笔记 - 视觉SLAM方法资源汇总

    工具类: ros框架 linux系列教程     vim Eigen     Eigen快速入门 Pangolin  Pangolin安装与使用 数据集: TUM         数据格式 提供pyt ...

  7. 设计模式之Chain of Responsibility(职责链)(转)

    Chain of Responsibility定义 Chain of Responsibility(CoR) 是用一系列类(classes)试图处理一个请求request,这些类之间是一个松散的耦合, ...

  8. RocketMQ 顺序消费只消费一次 坑

    rocketMq实现顺序消费的原理 produce在发送消息的时候,把消息发到同一个队列(queue)中,消费者注册消息监听器为MessageListenerOrderly,这样就可以保证消费端只有一 ...

  9. Linux基础命令---traceroute追踪路由

    traceroute       traceroute指令输出到目标主机的路由包.Traceroute跟踪从IP网络到给定主机的路由数据包.它利用IP协议的生存时间(TTL)字段,并试图在通往主机的路 ...

  10. Codeforce 296A - Yaroslav and Permutations

    Yaroslav has an array that consists of n integers. In one second Yaroslav can swap two neighboring a ...