学Pollard_Rho之前,你需要学会:Miller Rabin。

  这是一个很高效的玄学算法,用来对大整数进行因数分解。

  我们来分解n。若n是一个素数,那么就不需要分解了。所以我们还得能够判断一个数是否为素数才行。而n是个大整数,显然普通的试除法和筛法都是不够它跑的。所以我们就得考虑用Miller Rabin来判断。

  但n不是素数呢?这就得用Pollard_Rho了。首先我们来看一个有趣的东西:生日悖论。

  生日悖论:说简单点,就是在N个数里面选k个,当k接近√N时,选出两个相同数的几率约为50%。比如,不考虑闰年时,一个班若有23个人,则有两人生日相同的概率约为50%;但人数达到60时,概率约为基本上就是100%了,这严重违背了我们的生活经验,所以被列为了悖论。

  模仿着生日悖论,若在1~N里面选k个数X1,X2...XK,若k足够大,则很大几率有gcd(Xi-Xj,N)>1,也就是二者不互质,此时gcd(Xi-Xj,N)就是N的一个因数了。但是这样做复杂度又退回了O(k2),处理不好还能退化为O(n2)。所以Pollard_Rho是有改进的。首先是空间。改进的Pollard_Rho只需要存相邻的两个数:Xi,Xi+1。同时为了得到这些数,Pollard_Rho还设计了一个函数:f(Xi)=(Xi2+c) mod n。这个c可以rand出来。然后再计算d=gcd(|Xi-Xi+1|,N),若d>1,则递归分解d和n/d。

  但是mod n的值∈[0,n-1]之间,只有n个数,所以当递归够深时就会出现循环,这不利于我们的算法。就是这个样子(图是盗的):

  这里就有一个优化。像刚才的图一样,我们可以把循环节看成是一个环,我们只需要找出环就可以停下了。不然就一直跑到递归的数为素数为止。怎么找环呢?我们会想一下小学的追及问题。假设跑道上有两个人,一个高个子和一个矮个子。矮个子的速度为1,高个子的速度为2。如果跑道是无限长的直线,那高个子就会永远跑在矮个子前面。但如果有环,那么高个子就肯定追得到矮个子。Pollard_Rho就可以用这个办法来找环。

(这个图也是盗的)

与数论的厮守02:整数的因子分解—Pollard_Rho的更多相关文章

  1. 数学:随机素数测试(Miller_Rabin算法)和求整数素因子(Pollard_rho算法)

    POJ1811 给一个大数,判断是否是素数,如果不是素数,打印出它的最小质因数 随机素数测试(Miller_Rabin算法) 求整数素因子(Pollard_rho算法) 科技题 #include< ...

  2. 与数论的厮守01:素数的测试——Miller Rabin

    看一个数是否为质数,我们通常会用那个O(√N)的算法来做,那个算法叫试除法.然而当这个数非常大的时候,这个高增长率的时间复杂度就不够这个数跑了. 为了解决这个问题,我们先来看看费马小定理:若n为素数, ...

  3. 与数论的厮守05:gcd(a,b)=gcd(b,a mod b)的证明

    \[设c=gcd(a,b),那么a可以表示为mc,b可以表示为nc的形式.然后令a=kb+r,那么我们就\\ 只需要证明gcd(b,r)=c即可.{\because}r=a-kb=mc-knc,{\t ...

  4. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  5. Openssl编程--源码分析

    Openssl编程 赵春平 著 Email: forxy@126.com 第一章 基础知识 8 1.1 对称算法 8 1.2 摘要算法 9 1.3 公钥算法 9 1.4 回调函数 11 第二章 ope ...

  6. “不给力啊,老湿!”:RSA加密与破解

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...

  7. 最新证明面临质疑:P/NP问题为什么这么难?

    转自:http://tech.sina.com.cn/d/2017-08-16/doc-ifyixias1432604.shtml 编译 | 张林峰(普林斯顿大学应用数学专业博士研究生) 责编 | 陈 ...

  8. 巴塞尔问题(Basel problem)的多种解法

    巴塞尔问题(Basel problem)的多种解法——怎么计算\frac{1}{1^2}+\frac{1}{2^2}+\frac{1}{3^2}+\cdots112+122+132+⋯ ? (PS:本 ...

  9. 《openssl编程》:第一章基础知识

    第一章 基础知识 1.1 对称算法 对称算法使用一个密钥.给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同.解密时,使用读密钥与加密密钥相同. 对称算法主要有四种加密模式: (1) 电子密码 ...

随机推荐

  1. Python PIL 的image类和numpy array之间的互换

    import cv2 import numpy as np from PIL import Image from PIL import ImageEnhance def getline(frame): ...

  2. MATLAB 显示输出数据的三种方式

    MATLAB 显示输出数据的三种方式 ,转载 https://blog.csdn.net/qq_35318838/article/details/78780412 1.改变数据格式 当数据重复再命令行 ...

  3. 【XGBOOST】

    https://www.cnblogs.com/wxquare/p/5541414.html

  4. SpringMVC工作原理 : HandlerMapping和HandlerAdapter

    一.HandlerMapping 作用是根据当前请求的找到对应的 Handler,并将 Handler(执行程序)与一堆 HandlerInterceptor(拦截器)封装到 HandlerExecu ...

  5. ubuntu16.04 在/etc/network/interfaces设置static ip无效

    双网卡使用无线网卡上互联网,使用以太网卡连局域网,在/etc/network/interfaces里对以太网卡设置static ip无效,使用ifconfig临时设置也仅能工作一会,设置的ip马上就消 ...

  6. 【Static Program Analysis - Chapter 4】格理论(Lattice Theory)与程序分析

    # 从一个例子说起, **任务:给定这样一段代码,假设我们想分析出这段代码中,每个数值型变量和表达式的符号,即正数,负数或0.** 此外,还有可能出现两种情况就是: 1.我们无法分析出结果,即我们无法 ...

  7. Tomcat manager页面报403

    一.前言 我这边已经配置了tomcat-users.xml: <tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns ...

  8. 修改Linux系统默认编辑器

    修改ubuntu的默认编辑器: echo export EDITOR=/usr/bin/vim >> ~/.bashrc 故障过程: 修改过程: 强制断开连接,重新连接,修改默认编辑器:e ...

  9. Serv-u FTP迁移(windows_to_windwos)

    需求分析 公司服务器要做维护,部分服务器需要进行迁移处理,其中就包括Ser-v FTP服务器. 确认环境信息 角色 ip 系统版本 sql版本 Serv-U版本 ODBC account/passwo ...

  10. 死锁的原因及解决办法RLock递归锁

    死锁 说到死锁,可以讲一个科学家吃面的问题: 有几个科学家在一张桌子旁,桌子上只有一把筷子和一碗面,我们将面和筷子都加锁.这是可能会导致一个科学家抢到面,另一个科学家抢到筷子,这是就全部阻塞了,这就是 ...