博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Pollard-Rho大整数拆分模板
阅读量:4514 次
发布时间:2019-06-08

本文共 1626 字,大约阅读时间需要 5 分钟。

随机拆分,简直机智。

关于过程可以看http://wenku.baidu.com/link?url=JPlP8watmyGVDdjgiLpcytC0lazh4Leg3s53WIx1_Pp_Y6DJTC8QkZZqmiDIxvgFePUzFJ1KF1G5xVVAoUZpxdw9GN-S46eVeiJ6Q-zXdei

看完后,觉得随机生成数然后和n计算gcd,可以将随机的次数根号一下。思想很叼。

对于里面说的birthday trick,在执行次数上我怎么看都只能减一半。只是把平均分布,变成了靠近0的的分布。

不过怎么说,这个好像是大家都公认比较靠谱的。 所以,我就勉强相信了。

/*****************************大整数拆分模板(long long范围内)调用Divide(n,222);返回的结果在divsor中,因子最小值为dmi注意:复杂度为n^(1/4),多次调用初始化dcnt,dmi*****************************/#define INF 1e18long long divsor[100];int dcnt=0;long long dmi=INF;//输入一个long long 范围内的素数,是素数返回true,否则返回false。定义检测次数TIMES,错误率为(1/4)^TIMES#define TIMES 10long long GetRandom(long long n){    //cout<
<
>=1; a = (a+a)%mod; } return msum;}long long Quk_Mul(long long a,long long b,long long mod){ long long qsum=1; while(b) { if(b&1) qsum=Mod_Mul(qsum,a,mod); b>>=1; a=Mod_Mul(a,a,mod); } return qsum;}bool Miller_Rabin(long long n){ if(n==2||n==3||n==5||n==7||n==11) return true; if(n==1||n%2==0||n%3==0||n%5==0||n%7==0||n%11==0) return false; int div2=0; long long tn=n-1; while( !(tn%2) ) { div2++; tn/=2; } for(int tt=0;tt
=dn) dtmp = pollard_rho(dtmp,dk--);//随机寻找dn的因子,dtmp Divide(dtmp, dk); Divide(dn/dtmp,dk);}/*int main() { int T; cin>>T; while(T--) { long long n; cin>>n; if( Miller_Rabin(n) ) printf("Prime\n"); else { dmi=INF; dcnt=0; Divide(n,222); cout<
<

 

转载于:https://www.cnblogs.com/chenhuan001/p/5017762.html

你可能感兴趣的文章
Mysql模糊查询like效率,以及更高效的写法(转)
查看>>
JQuery怎样返回前一页
查看>>
百度的框计算,是科幻片还是生活片?
查看>>
SQL server 2008数据库的备份与还原(转)
查看>>
用OPencv配置vs2010
查看>>
关闭selinux
查看>>
个人站立会议06
查看>>
Sea.js & Require.js
查看>>
动态规划状态压缩-小乐乐堆积木
查看>>
ImageLoader图片加载
查看>>
实验4
查看>>
English Voice of <<City of stars>>
查看>>
English trip -- VC(情景课)5 C It's on Main Street 在主街上
查看>>
[Effective C++ --003]尽可能使用const
查看>>
考核题 5
查看>>
Python3 从零单排0_变量&格式化输出&流程控制&循环
查看>>
原生ajax与封装的ajax使用方法
查看>>
TCP协议的滑动窗口具体是怎样控制流量的
查看>>
VS插件
查看>>
Python之time模块
查看>>