1. 1 Accepted 8508K 579MS C++ 2237B/**
  2. hash的强大,,还是高次方程,不过要求n不一定是素数
  3. **/
  4. #include <iostream>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <cstring>
  8. #include <algorithm>
  9. using namespace std;
  10. long long a,b,n;
  11. const int maxn = ;
  12. bool Hash[maxn];
  13. long long val[maxn];
  14. long long idx[maxn];
  15.  
  16. long long gcd(long long a,long long b){
  17. if(b==)
  18. return a;
  19. return gcd(b,a%b);
  20. }
  21.  
  22. void ex_gcd(long long a,long long b,long long &x,long long &y){
  23. if(b==){
  24. x=;
  25. y=;
  26. return ;
  27. }
  28. ex_gcd(b,a%b,x,y);
  29. long long tmp= x-(a/b)*y;
  30. x = y;
  31. y = tmp;
  32. return ;
  33. }
  34.  
  35. void Insert(long long id,long long num){
  36. long long k = num%maxn;
  37. while(Hash[k]&&val[k]!=num){
  38. k++;
  39. if(k==maxn) k = k-maxn;
  40. }
  41. if(!Hash[k]){
  42. Hash[k] = true;
  43. val[k] = num;
  44. idx[k] = id;
  45. }
  46. return;
  47. }
  48.  
  49. long long found(long long num){
  50. long long k = num%maxn;
  51. while(Hash[k]&&val[k]!=num){
  52. k++;
  53. if(k==maxn) k-=maxn;
  54. }
  55. if(Hash[k]){
  56. return idx[k];
  57. }
  58. return -;
  59. }
  60.  
  61. long long baby_step(long long a,long long b,long long n){
  62. long long temp =;
  63. long long i;
  64. for(i=;i<=;i++){
  65. if(temp==b%n) return i;
  66. temp = temp*a%n;
  67. }
  68. long long tmp,d =,cnt=;
  69. memset(Hash,false,sizeof(Hash));
  70. memset(val,-,sizeof(val));
  71. memset(idx,-,sizeof(idx));
  72.  
  73. while((tmp=gcd(a,n))!=){
  74. if(b%tmp)
  75. return -;
  76. cnt++;
  77. n = n/tmp;
  78. b = b/tmp;
  79. d =d*a/tmp%n;
  80. }
  81. long long cur =;
  82. long long m = ceil(sqrt(n+0.5));
  83. for(i=;i<m;i++){
  84. Insert(i,cur);
  85. cur = cur*a%n;
  86. }
  87. long long x,y;
  88. for(i=;i<m;i++){
  89. ex_gcd(d,n,x,y);
  90. x = x*b%n;
  91. x = (x%n+n)%n;
  92. long long k = found(x);
  93. if(k!=-)
  94. return i*m+k+cnt;
  95. d = d*cur%n;
  96. }
  97. return -;
  98. }
  99.  
  100. int main()
  101. {
  102. while(scanf("%I64d%I64d%I64d",&a,&n,&b)==){
  103. if(a==&&b==&&n==)
  104. break;
  105. long long res = baby_step(a,b,n);
  106. if(res==-){
  107. printf("No Solution\n");
  108. }else{
  109. printf("%I64d\n",res);
  110. }
  111. }
  112. return ;
  113. }

poj 3243 Clever Y 高次方程的更多相关文章

  1. POJ 3243 Clever Y (求解高次同余方程A^x=B(mod C) Baby Step Giant Step算法)

    不理解Baby Step Giant Step算法,请戳: http://www.cnblogs.com/chenxiwenruo/p/3554885.html #include <iostre ...

  2. POJ 3243 Clever Y 扩展BSGS

    http://poj.org/problem?id=3243 这道题的输入数据输入后需要将a和b都%p https://blog.csdn.net/zzkksunboy/article/details ...

  3. poj 3243 Clever Y && 1467: Pku3243 clever Y【扩展BSGS】

    扩展BSGS的板子 对于gcd(a,p)>1的情况 即扩展BSGS 把式子变成等式的形式: \( a^x+yp=b \) 设 \( g=gcd(a,p) \) 那么两边同时除以g就会变成: \( ...

  4. POJ 3243 Clever Y(离散对数-拓展小步大步算法)

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  5. [POJ 3243]Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

  6. POJ 3243 Clever Y | BSGS算法完全版

    题目: 给你A,B,K 求最小的x满足Ax=B (mod K) 题解: 如果A,C互质请参考上一篇博客 将 Ax≡B(mod C) 看作是Ax+Cy=B方便叙述与处理. 我们将方程一直除去A,C的最大 ...

  7. POJ 3243 Clever Y Extended-Baby-Step-Giant-Step

    题目大意:给定A,B,C,求最小的非负整数x,使A^x==B(%C) 传说中的EXBSGS算法0.0 卡了一天没看懂 最后硬扒各大神犇的代码才略微弄懂点0.0 參考资料: http://quarter ...

  8. 【POJ】3243 Clever Y

    http://poj.org/problem?id=3243 题意:求$a^y \equiv b \pmod{p}$最小的$y$.(0<=x, y, p<=10^9) #include & ...

  9. BZOJ 3243 Clever Y

    Description Little Y finds there is a very interesting formula in mathematics: XY mod Z = K Given X, ...

随机推荐

  1. EF(ServerFirst)执行存储过程实例1(带输出参数)

    1.不含动态sql.带输出参数存储过程调用实例 a.存储过程代码: b.EF自动生成代码(包括对应ObjectResult的实体模型): c.调用存储过程代码实例:  总结: ObjectParame ...

  2. 日期选择器——java

    转载:http://zgdeng.iteye.com/blog/1405650 代码如下: import java.awt.BasicStroke; import java.awt.BorderLay ...

  3. MSSQL数库备份与还原脚本(多个库时很方便)

    每次通过 Management Studio 的界面操作备份或还原数据库,对于单个数据库还好,要是一次要做多个.那就还是用脚本快些,下面有两段脚本分享一下. ===================== ...

  4. IO与文件读写---使用Apache commons IO包提高读写效率

    觉得很不错,就转载了, 作者: Paul Lin 首先贴一段Apache commons IO官网上的介绍,来对这个著名的开源包有一个基本的了解:Commons IO is a library of ...

  5. 关于 WP上应用调试时报错“指定的通信资源(端口)”已由另一个应用程序使用 问题

    问题来源 碰到这个问题是调试wp7项目的时候,之前因为安装的是wp8.0的sdk 包括wp7.5所以wp7的也能用,后来不知道怎么回事wp7项目就不能调试了总是显示启动而不是 device或者是虚拟机 ...

  6. java——String的那边破事

    经典的先看下面一段代码,请问最终创建几个对象,分别在哪里? String s0 = new String("luoliang.me"); String s1 = "luo ...

  7. gmpy2安装使用方法

    GMP(GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数.实数.浮点数的高精度运算,还有 ...

  8. HDU 5763 Another Meaning(FFT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5763 [题目大意] 给出两个串S和T,可以将S串中出现的T替换为*,问S串有几种表达方式. [题解 ...

  9. 重拾CSS基础—开篇

    由来 从事软件行业一晃也5年有余,之间参与过若干个基于web的项目,所以javascript和Html基本已经相当熟悉,最近对于web前端开发比较关注,分析后发现CSS的确是自己的弱项,于是决定再加强 ...

  10. CSS 常用自定义样式

    目录: 1. 文本单行显示,并对超出部分截断以省略号代替: 2.列布局或栅格布局:比如:左侧固定宽度,右侧占满剩下的宽度: 章节: 1. 文本单行显示,并对超出部分截断以省略号代替:参见以下代码: d ...