bzoj3667 Rabin-Miller算法
来源:互联网 发布:测试虚拟机上的nginx 编辑:程序博客网 时间:2024/06/15 00:00
标题写错了,其实这题考pollard-rho。
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;#define LL long longint prm[]={2,3,5,7,11,13,17,19,23};LL Rand(LL n){ return rand()%(n-1)+1;}LL dec(LL x,LL y,LL p){ x-=y; return x<0?x+p:x;}LL inc(LL x,LL y,LL p){ unsigned LL ret=(unsigned LL)x+y; return ret>=p?ret-p:ret;}LL mul(LL x,LL y,LL p){ LL ret=0; for (;y;y>>=1,x=inc(x,x,p)) if (y&1) ret=inc(ret,x,p); return ret;}LL pow(LL x,LL y,LL p){ LL ret=1; for (;y;y>>=1,x=mul(x,x,p)) if (y&1) ret=mul(ret,x,p); return ret;}LL gcd(LL x,LL y){ return y?gcd(y,x%y):x;}/*inline bool check(LL n) { if( n == 2 || n == 3 || n == 5 ) return 1; if( n < 2 || !(n&1) || n % 3 == 0 || n % 5 == 0 ) return 0; LL m = n - 1; int k = 0; while( !(m & 1) ) m >>= 1, k++; for (int i=1;i<=5;i++) { LL x = pow(rand() % (n-1) + 1,m,n), y; for (int j=1;j<=k;j++) { y = mul(x,x,n); if( y == 1 && x != 1 && x != n - 1 ) return 0; x = y; } if( y != 1 ) return 0; } return 1;}*/inline int check(LL n){ /*for (int i=0;i<=3;i++) { if (n==prm[i]) return 1; if (n%prm[i]==0) return 0; }*/ /*if (n==2||n==3||n==5) return 1; if (n<=1||(n&1)==0||n%2==0||n%3==0||n%5==0) return 0;*/ LL x=n-1,k=0,y,z; while (!(x&1)) x>>=1,k++; for (int i=1;i<=5;i++) { y=pow(Rand(n),x,n); for (int j=1;j<=k;j++) { z=mul(y,y,n); if (z==1&&y!=1&&y!=n-1) return 0; y=z; } if (y!=1) return 0; } return 1;}LL solve(LL n){ if (check(n)) return n; LL x=Rand(n),y,c=Rand(n),d; y=x; for (int i=1,k=1;;i++) { x=inc(mul(x,x,n),c,n); d=gcd(dec(x,y,n),n); if (d==n) return solve(n); if (d>1) return max(solve(d),solve(n/d)); if (i==k) k<<=1,y=x; }}int main(){ srand(321453); int T; LL n,ans; scanf("%d",&T); while (T--) { scanf("%lld",&n); ans=solve(n); if (ans==n) printf("Prime\n"); else printf("%lld\n",ans); }}
阅读全文
0 0
- 【BZOJ3667】Rabin-Miller算法
- BZOJ3667: Rabin-Miller算法
- bzoj3667: Rabin-Miller算法
- bzoj3667: Rabin-Miller算法
- bzoj3667 Rabin-Miller算法
- BZOJ3667:Rabin-Miller算法
- bzoj3667 Rabin-Miller算法【Rabin-Miller+pollard_rho】
- 【BZOJ3667】Rabin-Miller算法(Pollard_pho算法)
- 【bzoj3667】Rabin-Miller算法 素数测试
- BZOJ3667: Rabin-Miller算法 (Miller-Rabin&&pol_rho&&特技快速乘学习笔记)
- Miller-Rabin算法
- miller-rabin,Pollard_rho算法
- Miller-Rabin算法
- Rabin-Miller算法
- Miller Rabin算法
- 3667: Rabin-Miller算法
- Miller-Rabin算法
- 3667: Rabin-Miller算法
- 如何处理原始文本数据(CNN情感分析yoom例子二)
- 判断一颗树是否为二叉搜索树
- 属性动画Animator玩法/自定义估值器TypeEvaluator实现抛物线曲线动画
- tomcat配置文件server.xml详解
- Android老师作业八
- bzoj3667 Rabin-Miller算法
- 『ORACLE』分析redo块
- android studio停留在Refreshing gradle project 解决方法
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- JAVA_关于JAVA中的数据类型
- POJ 1797 Heavy Transportation 笔记
- hadoop就业面试题
- Linux学习笔记 --ISCSI
- Struts2文件上传需要用到的外部jar包