无需逆元版本:

#include<cstdio>
#include<cassert>
#include<cmath>
#include<map>
typedef long long ll;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;
}
ll qpow(ll a,ll b,ll p) {ll ret = 1;while(b) {if(b&1) {ret=ret*a%p;}a=a*a%p;b>>=1;}return ret;
}
ll exgcd(ll a,ll b,ll &x,ll &y) {if(b==0) {x=1;y=0;return a;}ll d = exgcd(b,a%b,x,y);ll tmp = x;x = y;y=tmp-a/b*y;return d;
}
inline ll bsgs(ll a,ll b,ll p) {std::map<ll,ll> M;if(p==1) return 0;a%=p;b%=p;ll d,cnt=0,q=1;while((d=gcd(a,p))!=1) {if(b==1) return cnt;if(b%d) return -1;b/=d;p/=d;++cnt;q=a/d*q%p;}ll lmt = ceil(sqrt(p));ll tmp = b%p;for(int i = 0;i<lmt;++i,tmp=tmp*a%p) {M[tmp]=i;}tmp = qpow(a,lmt,p);for(int i = 1;i<=lmt+1;++i) {q=q*tmp%p;if(M.count(q)) {return i*lmt-M[q]+cnt;}}return -1;
}
int main() {ll a,b,p;scanf("%lld%lld%lld",&a,&p,&b);while(a||b||p) {ll ans = bsgs(a,b,p);if(ans==-1) puts("No Solution");else printf("%lld\n",ans);scanf("%lld%lld%lld",&a,&p,&b);}return 0;
}

转载于:https://www.cnblogs.com/Syameimaru/p/10221311.html

【文文殿下】ExBSGS相关推荐

  1. 【文文殿下】数论一些经典结论

    \(x^2+y^2=n\)的整数解的个数,是n的所有素数中,形如\(4n+1\)的素数的指数+1的乘积,如果有形如\(4n+3\)的素数,指数不为偶数,则无解,证明方法:高斯素数. \(d(ij) = ...

  2. 【文文殿下】快速傅里叶变换(FFT)学习笔记

    多项式 定义 形如\(A(x)=\sum_{i=0}^{n-1} a_i x^i\)的式子称为多项式. 我们把\(n\)称为该多项式的次数界. 显然,一个\(n-1\)次多项式的次数界为\(n\). ...

  3. 【文文殿下】网络流学习笔记

    最大流算法 Dinic 割 一个网络的割:存在一个边集,删去集合里的边时,S-T不再连通 最小割 所有割中边权之和最小的 最小割-最大流定理 最小割等于最大流 二分图匹配 \(M\)为边集\(E\)的 ...

  4. 【文文殿下】Manache算法-学习笔记

    Manache算法 定义:是一个判断回文子串的算法,我们结合例题解释: 题目:给定一个长度为 n 的字符串 S,求其最长回文子串 一个字符串是回文的,当且仅当反转后的串与原串完全相等 分析:对于这个题 ...

  5. 【文文殿下】 [USACO08MAR]土地征用 题解

    题解 斜率优化裸题. 有个很玄学的事情,就是我用\(f[i]=min\{f[j-1]+p[j].y*p[i].x\}\) 会很奇怪的Wa . 明明和\(f[i]=min\{f[j]+p[j+1].y* ...

  6. 【文文殿下】浅谈KMP算法next数组与循环节的关系

    KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...

  7. 【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王

    题解 这是一个经典的概率DP模型 设\(f_{i,j}\)表示考虑到前\(i\)张牌,有\(j\)轮没打出牌的可能性,那么显然\(f_{0,r} = 1\). 考虑第\(i+1\)张牌,他可能在剩下的 ...

  8. 【文文殿下】Win7打开无线热点

    下载程序 : https://files.cnblogs.com/files/Syameimaru/wifi.rar 打开config.ini 修改相关信息,然后运行程序. 运行成功后,打开网络和共享 ...

  9. ad中pcb双面板怎么设置_Altium Designer PCB双面板制作打印操作步骤

    Altium Designer PCB双面板制作打印操作步骤百度知道: http://jingyan.baidu.com/article/335530da83441c19cb41c3db.html?s ...

最新文章

  1. linux验证文件的完整性,linux中校验文件完整性(md5,sha1)(示例代码)
  2. cmd 一键获取 所有连接过的wifi 密码
  3. 10万点击率的“干货”,其实人人都写得出来
  4. [NowCoder] 牛牛数星星
  5. 深度解析利用ES6进行Promise封装总结
  6. Android进阶篇-清除WebView的缓存
  7. 【测试思考】测试段位之测试六段
  8. linux mysql5.6 安装
  9. Log 日志的使用与重要性
  10. 求翻转数循环结构C语言,[LeetCode Easy题快一起刷起来] 1. 两数之和 7. 整数翻转
  11. 洛谷P1313 计算系数
  12. Mac(不限于)中几个有内涵的工具
  13. java多线程-线程的实现方式
  14. USB速度异常的问题
  15. Allegro如何给铜皮导弧操作详解
  16. 7-7 六度空间 (30分)
  17. php判断某天星期几,php怎么判断指定日期是星期几?
  18. AutoSF- Searching Scoring Functions for Knowledge Graph Embedding
  19. 天刀 服务器状态,天刀实用技巧_天刀各种游戏小技巧_玩游戏网
  20. js 精确判断对象的类型

热门文章

  1. 超声波模块测距 Arduino代码
  2. matlab排版形式是什么样子,版式设计技巧!论图文排版的基本形式
  3. java敏感词屏蔽器,“敏感词过滤”功能设置
  4. 语义分割系列2-Unet(pytorch实现)
  5. InputReader读取rawEvent解析
  6. 工作辛苦了,提前祝大家五一劳动节快乐!!
  7. LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation【论文阅读笔记】
  8. 太魔人招新|快来加入我们吧~
  9. z自建服务器,《守望先锋》将加入自建服务器 自定规则
  10. 软件工程__软件开发方法