两个没什么卵用的算法。

只放一下模板:

BZOJ3667

  1. //BZOJ 3667
  2. //by Cydiater
  3. //2017.2.20
  4. #include <iostream>
  5. #include <queue>
  6. #include <map>
  7. #include <ctime>
  8. #include <cmath>
  9. #include <cstring>
  10. #include <string>
  11. #include <cstdlib>
  12. #include <cstdio>
  13. #include <algorithm>
  14. #include <iomanip>
  15. #include <bitset>
  16. #include <set>
  17. #include <vector>
  18. #include <complex>
  19. using namespace std;
  20. #define ll long long
  21. #define up(i,j,n) for(ll i=j;i<=n;i++)
  22. #define down(i,j,n) for(ll i=j;i>=n;i--)
  23. #define cmax(a,b) a=max(a,b)
  24. #define cmin(a,b) a=min(a,b)
  25. inline ll read(){
  26. char ch=getchar();ll x=0,f=1;
  27. while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  28. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  29. return x*f;
  30. }
  31. ll N,ans=0,a[]={2,3,5,7,11,13,17,19,23,29};
  32. namespace solution{
  33. ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
  34. ll mul(ll x,ll y,ll mod){
  35. ll tmp=0;
  36. while(y){
  37. if(y&1)(tmp+=x)%=mod;
  38. (x+=x)%=mod;y>>=1;
  39. }
  40. return tmp;
  41. }
  42. ll quick_pow(ll base,ll ind,ll mod){
  43. ll tmp=1;
  44. while(ind){
  45. if(ind&1)tmp=mul(tmp,base,mod);
  46. base=mul(base,base,mod);ind>>=1;
  47. }
  48. return tmp;
  49. }
  50. bool OK(ll base,ll num){
  51. if(!(num&1)||num==1)return 0;
  52. ll ind=num-1;
  53. while(!(ind&1))ind>>=1;
  54. ll Num=quick_pow(base,ind,num);
  55. if(Num==1)return 1;
  56. while(ind<num){
  57. if(Num==num-1)return 1;
  58. Num=mul(Num,Num,num);ind<<=1;
  59. }
  60. return 0;
  61. }
  62. bool isPrime(ll num){
  63. up(i,0,9){
  64. if(num==a[i])return 1;
  65. if(!OK(a[i],num))return 0;
  66. }
  67. return 1;
  68. }
  69. ll rho(ll num,ll c){
  70. ll i=1,k=2,x=rand()%(num-1)+1,y=x;
  71. while(true){
  72. i++;
  73. x=(mul(x,x,num)+c)%num;
  74. ll d=gcd((y-x+num)%num,num);
  75. if(d>1&&d<num)return d;
  76. if(x==y)return num;
  77. if(i==k){y=x;k<<=1;}
  78. }
  79. }
  80. void find(ll num,ll k){
  81. if(num==1||num<=ans)return;
  82. if(isPrime(num)){
  83. cmax(ans,num);
  84. return;
  85. }
  86. ll p=num,c=k;
  87. while(p>=num)p=rho(num,k--);
  88. find(p,c);find(num/p,c);
  89. }
  90. void Solve(){
  91. N=read();ans=0;
  92. while(N--){
  93. ll num=read();ans=0;
  94. find(num,120);
  95. if(ans==num)puts("Prime");
  96. else printf("%lld\n",ans);
  97. }
  98. }
  99. int main(){
  100. freopen("input.in","r",stdin);
  101. using namespace solution;
  102. Solve();
  103. return 0;
  104. }

Rubin-Miller与Pollard Rho的更多相关文章

  1. Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法

    BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1044  Solved: 322[Submit][ ...

  2. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

  3. Miller-Rabin 素性测试 与 Pollard Rho 大整数分解

    \(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...

  4. 浅谈 Miller-Robbin 与 Pollard Rho

    前言 $Miller-Robbin$ 与 $Pollard Rho$ 虽然都是随机算法,不过用起来是真的爽. $Miller Rabin$ 算法是一种高效的质数判断方法.虽然是一种不确定的质数判断法, ...

  5. Pollard Rho 算法简介

    \(\text{update 2019.8.18}\) 由于本人将大部分精力花在了cnblogs上,而不是洛谷博客,评论区提出的一些问题直到今天才解决. 下面给出的Pollard Rho函数已给出散点 ...

  6. Pollard Rho算法浅谈

    Pollard Rho介绍 Pollard Rho算法是Pollard[1]在1975年[2]发明的一种将大整数因数分解的算法 其中Pollard来源于发明者Pollard的姓,Rho则来自内部伪随机 ...

  7. POJ 1811 Prime Test (Pollard rho 大整数分解)

    题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...

  8. 整数(质因子)分解(Pollard rho大整数分解)

    整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...

  9. Pollard Rho因子分解算法

    有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...

  10. 初学Pollard Rho算法

    前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...

随机推荐

  1. Google词向量word2vec的使用

    """ 1.在自然语言处理中常常使用预训练的word2vec,这个预训练的词向量可以使用google的GoogleNews-vectors-negative300.bin ...

  2. oracle11gR2 win7_32位客户端连接虚拟机中oracle11gR2 win7_32位服务器方法

    改写服务器中的监听文件(listener.ora和tnsnames.ora) “ora-12541:TNS:无监听程序”问题的解决 ora-12541:TNS:无监听程序,出现这种错误的时候,可以尝试 ...

  3. jquery报错:“ReferenceError: jQuery is not defined”

    这明显是没有引到jquery,原因就是jquery没有放在最前面,jquery应该最先引入.

  4. A Simple Problem with Integers---poj3468线段树

    http://poj.org/problem?id=3468   题意:有一个比较长的区间可能是100000.长度, 每个点都有一个值(值还比较大), 现在有一些操作: C a b c, 把区间a-- ...

  5. sublime eslint 和 jshint的安装与使用

    jshint简介 jslint是一javascript的语法检测,众多前端自动化工具都又用到,编辑器也用到jshint. webstorm很强大,自身带有,但是我使用的电脑带不动.sublime或者a ...

  6. oracle(三) SQL语句

    1.聚集函数遇到空值时,除count(*)外,都会跳过空值. 2.group by 细化聚集函数的作用对象 3.group by有个原则,就是select后面出面的列,除聚集函数外必须出现在group ...

  7. HTTP API响应数据规范整理

    概述 本文档为本人对长期开发API接口所整理的经验总结,如有不完善或不合理的地方,望各位多提意见. 文档目的为规范服务器端API接口,便于服务器端与客户端代码重用.服务器端和客户端可根据实际所定义规范 ...

  8. windows安装并破解navicat.

    1:下载以下两个文件. patchNavicat.exe:  https://pan.baidu.com/s/1ZtV20GUGfZHcXHRTEb5tYg navicatforMysql.exe:  ...

  9. dfs模板(真心不会深搜)

    栈 #include <stdio.h> #include <string.h> ][]; ][]; ,-, , }; , ,-, }; int Min; void dfs(i ...

  10. Linux学习网站推荐

    最近想重新拾起Linux,发现了实验楼这个网站:https://www.shiyanlou.com/,可以通过这个网站学习Linux以及其他一些知识,可以直接学习直接动手操作,比较方便.