无需逆元版本:

  1. #include<cstdio>
  2. #include<cassert>
  3. #include<cmath>
  4. #include<map>
  5. typedef long long ll;
  6. ll gcd(ll a,ll b) {
  7. return b?gcd(b,a%b):a;
  8. }
  9. ll qpow(ll a,ll b,ll p) {
  10. ll ret = 1;
  11. while(b) {
  12. if(b&1) {
  13. ret=ret*a%p;
  14. }
  15. a=a*a%p;
  16. b>>=1;
  17. }
  18. return ret;
  19. }
  20. ll exgcd(ll a,ll b,ll &x,ll &y) {
  21. if(b==0) {
  22. x=1;y=0;
  23. return a;
  24. }
  25. ll d = exgcd(b,a%b,x,y);
  26. ll tmp = x;
  27. x = y;
  28. y=tmp-a/b*y;
  29. return d;
  30. }
  31. inline ll bsgs(ll a,ll b,ll p) {
  32. std::map<ll,ll> M;
  33. if(p==1) return 0;
  34. a%=p;b%=p;
  35. ll d,cnt=0,q=1;
  36. while((d=gcd(a,p))!=1) {
  37. if(b==1) return cnt;
  38. if(b%d) return -1;
  39. b/=d;
  40. p/=d;
  41. ++cnt;
  42. q=a/d*q%p;
  43. }
  44. ll lmt = ceil(sqrt(p));
  45. ll tmp = b%p;
  46. for(int i = 0;i<lmt;++i,tmp=tmp*a%p) {
  47. M[tmp]=i;
  48. }
  49. tmp = qpow(a,lmt,p);
  50. for(int i = 1;i<=lmt+1;++i) {
  51. q=q*tmp%p;
  52. if(M.count(q)) {
  53. return i*lmt-M[q]+cnt;
  54. }
  55. }
  56. return -1;
  57. }
  58. int main() {
  59. ll a,b,p;
  60. scanf("%lld%lld%lld",&a,&p,&b);
  61. while(a||b||p) {
  62. ll ans = bsgs(a,b,p);
  63. if(ans==-1) puts("No Solution");
  64. else printf("%lld\n",ans);
  65. scanf("%lld%lld%lld",&a,&p,&b);
  66. }
  67. return 0;
  68. }

【文文殿下】ExBSGS的更多相关文章

  1. 【文文殿下】WC2019游记

    Day0 今天早上三点半才睡着,五点起床,前往省城郑州.与省实验常老师汇合,坐上高铁,下午三点半多才到广州二中. 下午随便找了一个教室进去敲一敲代码,发现自己越来越菜了. 和一大堆网上的dalao面基 ...

  2. 【文文殿下】NOIp2018游记

    Day-1 本段更新于 2018年11月8日23:26:44 今天还在机房里面,无所事事吧.上午睡了一上午,出去理了一下发,花了20块钱 QAQ. 下午来到机房,复习了一下exgcd的东西. 发现自己 ...

  3. 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)

    题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...

  4. [文文殿下]基本的DP技巧

    . 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩 ...

  5. 【文文殿下】CF1029F Multicolored Markers

    这道题考场上卡了文文相当长的时间,所以写个题解泄泄愤QAQ 题意:给你$a$块红瓷砖,$b$块白瓷砖,在一个无限大的地上拼装,要求整体是一个矩形,并且至少有一种颜色是一个矩形,求最小周长. 题解: 首 ...

  6. 【文文殿下】P3737 [HAOI2014]遥感监测

    题解 显然可以把每个观测点,认为是x轴上的一段区间.问题就转换为了:对于x轴上的若干个区间,选取尽可能少的点,使得所有区间都有至少一个点. 这是一个相当经典的贪心问题. 代码如下: #include& ...

  7. 【文文殿下】P3740 [HAOI2014]贴海报

    题解 一开始想到离散化,然后暴力模拟.但是存在一种hack数据: [5,7] [1,5] [7,9] 这样会错误的认为第一个区间被覆盖了(因为两个端点被覆盖).所以我们设置一个玄学调参系数,在一个区间 ...

  8. 【文文殿下】【洛谷】分治NTT模板

    题解 可以计算每一项对后面几项的贡献,然后考虑后面每一项,发现这是一个卷积,直接暴力NTT就行了,发现它是一个有后效性的,我们选择使用CDQ分治. Tips:不能像通常CDQ分治一样直接 每次递归两边 ...

  9. 【文文殿下】[AH2017/HNOI2017]礼物

    题解 二项式展开,然后暴力FFT就好了.会发现有一个卷积与c无关,我们找一个最小的项就行了. Tips:记得要倍长其中一个数组,防止FFT出锅 代码如下: #include<bits/stdc+ ...

随机推荐

  1. php初中高阶段

    多学习PHP的朋友比较关心的问题之一就是学成后就业的薪资问题,关于PHP就业工资我们共同来探讨一下,其实小编觉得,PHP就业工资是多少并不重要,总要的是你的技术值多少钱,只要你的技术很棒,高薪根本就不 ...

  2. centos一键安装lnmp成功后无法访问ip(解决办法)

    自己搞了个服务器 (我的服务器网络类型是 专有网络)如下图点击 配置规则 进入到 进.出端口规则配置 点击添加安全组规则 如图所配置  添加完成后 就如下面所示 (配置完成后 通过ip就已经可以访问了 ...

  3. 轻松学SQL Server数据库

    轻松学SQL Server数据库pdf   下载地址:网盘下载 目录:  第1章 数据库与SQL Server 2008 11.1 数据库基础 21.1.1 数据库的概念 21.1.2 数据库模型 2 ...

  4. 前端之css笔记2

    1 属性选择器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  5. 2018.06.27Going Home(二分图匹配)

    Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24716 Accepted: 12383 Descript ...

  6. C++之类和对象的使用(三)

    对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供.Student stud[3]={90,92,01};//合法 如果构造函数有多个参数,则不能用在定义时直接所提供所有 ...

  7. deploy myeclipse j2ee project to server 按了没反应 怎么办

    解决办法: 1.如果工作空间的问题,那么需要删除你工作空间的一个文件就可以解决了. 这个文件在Myeclipse工作区(workspace) .metadata\.plugins\org.eclips ...

  8. 在mui中创建aJax来请求数据..并展示在页面上

    <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <m ...

  9. ACM STEPS——Chapter Two——Section One

    数学题小关,做得很悲剧,有几道题要查数学书... 记下几道有价值的题吧 The area(hdoj 1071) http://acm.hdu.edu.cn/showproblem.php?pid=10 ...

  10. Codeforces807 B. T-Shirt Hunt 2017-05-08 23:23 175人阅读 评论(0) 收藏

    B. T-Shirt Hunt time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...