无需逆元版本:

  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. Alluxio/Tachyon如何发挥lineage的作用?

    在Spark的RDD中引入过lineage这一概念.指的是RDD之间的依赖.而Alluxio则使用lineage来表示文件之间的依赖.在代码层面,指的是fileID之间的依赖. 代码中的注释指出: * ...

  2. 20172325 2017-2018-2 《Java程序设计》第八周学习总结

    20172325 2017-2018-2 <Java程序设计>第八周学习总结 教材学习内容总结 1.关于绑定 绑定:在执行程序时产生一个请求事件,需要执行一段代码来来完成方法调用,即一个方 ...

  3. 连接redis

  4. extjs 学习一

    环境 : eclipse  ext  tomcat 6 将下载的extjs  解压后全部 导入到项目中 .使用时 <!-- 1.引入样式 2.引入库文件 ,底层驱动 3. ext-all--&g ...

  5. Check time of different search methods

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...

  6. 2018.07.04 POJ 1654 Area(简单计算几何)

    Area Time Limit: 1000MS Memory Limit: 10000K Description You are going to compute the area of a spec ...

  7. centos6.5(64位)离线安装scalr

    1.下载scalr-server安装备包: 下载地址:http://pan.baidu.com/s/1eSA3dom scalr-server-5.1.0.oss-nightly.2015013004 ...

  8. C语言学生管理系统源码分享

    大家好 我就是如假包换的...陈玲 自从运营了C语言程序设计微信公众号 很多粉丝都给我备注 ...奇葩 实在是不敢当 也被人开始叫玲玲姐 我知道 很多人都想看我出境 我本人也有 年多的舞台演讲训练 实 ...

  9. An existing resource has been found at location D:\Tomcat 7\apache-tomcat-7.0.55\webapps。。。

    这个错误是说你的资源丢失,就是说tomcat无法解析你的.class文件,需要自己重新配置一下. 解决方法: 右击项目名 ---> 点击properties --> 在搜索栏里 输入 WE ...

  10. DEVEXPRESS 破解方法

    Devexpress 是.net的一个非常好用的插件.能够轻松的帮你实现一个非常炫的UI,无论是C#的Winform还是ASP.NET的网站. 鄙人这两天在用DEVEXPRESS的过程中发现在网上并未 ...