文章目录

  • 算法
  • Python实现

算法

  1974年,John Pollard发明了p-1算法,其灵感来自于费马小定理。p-1算法一个重要的概念就是B-powersmooth,这个不太好翻译,power,幂,smooth,光滑,就叫幂滑吧。其定义如下,对于质数p,将p-1进行质因数分解,最大的因子dkd^kdk就是B,而这个质数就是B-powersmooth。举个例子,质数p=1303,p−1=1302=2⋅3⋅7⋅31p-1=1302=2\cdot3\cdot7\cdot31p−1=1302=2⋅3⋅7⋅31,那么质数1303就是31-powersmooth。再举个例子,质数3697,p−1=3696=24⋅3⋅7⋅11p-1=3696=2^4\cdot3\cdot7\cdot11p−1=3696=24⋅3⋅7⋅11,那么3697就是16-powersmooth。
  Pollard p-1算法基于费马小定理。费马小定理我们已经讲过无数遍了,实际上很多算法都是基于费马小定理的,比如米勒罗宾素性检验。我们从费马小定理开始展开讲讲,其公式如下:
ap−1≡1modpa^{p-1}\equiv1\;mod\;p ap−1≡1modp
  假使我们要对整数n进行质因数分解,他的其中一个质因数是p,数学里的整除符号是p∣np\;|\;np∣n。对于p,有:
d=ap−1−1=0modpd=a^{p-1}-1=0\;mod\;p d=ap−1−1=0modp
  所以d是p的倍数,也就是p∣dp\;|\;dp∣d,可以得到p=gcd(d,n)p=gcd(d,n)p=gcd(d,n)。讲得这么复杂,其实就是:
gcd(ap−1−1,n)=pgcd(a^{p-1}-1,n)=p gcd(ap−1−1,n)=p
  当然不可能一个个地尝试,那么和原始质因数分解没什么区别。Pollard p-1算法采用了一种随机数的策略。如果随机不出结果,那么就从小于B(这个B代表B-powersmooth)的质数列表里去连成,组成上述公式中的d,直到质数列表被用尽。

Python实现

# _*_ encoding:utf-8 _*_import randomdef gcd(m, n):if m < n:m, n = n, mwhile m % n != 0:m, n = n, m % nreturn ndef sieve(n):mpfs = [0] * (n + 1)pn = []for i in range(2, n + 1):mpf = mpfs[i]if mpf == 0:pn.append(i)mpf = ifor p in pn:if p > mpf:breakx = p * iif x > n:breakmpfs[x] = preturn pndef pollard(n):b = 10_0000while b <= 100_0000:a = random.randint(2, n - 1)g = gcd(a, n)if g > 1:return g, n // gfor p in sieve(b):if p >= b:continuep_power = 1while p_power * p <= b:p_power *= pg = gcd(p_power - 1, n)if g > 1 and g < n:return g, n // gb <<= 1return 1, ndef factor(n):factors = []stack = [n]while len(stack) > 0:x = stack.pop()if x == 2:factors.insert(0, x)continuep, q = pollard(x) if x & 1 == 1 else (2, x >> 1)if p == 1:factors.insert(0, q)else:stack.append(p)stack.append(q)return factorsif __name__ == '__main__':print(factor(200))

  测试结果:

[2, 2, 2, 5, 5]

4.2 Pollard p-1算法相关推荐

  1. 【快速因数分解】Pollard's Rho 算法

    算法目的 给一个数n,快速提取n的一个因数. 算法根据:生日悖论 讲生日悖论之前,先看一个东西. 给出[1-1000]的数,从中任意选出一个数为k的概率是110001\over 100010001​. ...

  2. 《算法竞赛中的初等数论》(一)正文 0x00整除、0x10 整除相关(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  3. 如何检测链表中的循环?

    假设您在Java中有一个链表结构. 它由节点组成: class Node {Node next;// some user data } 每个节点都指向下一个节点,但最后一个节点除外,后者的下一个为空. ...

  4. pollard_rho

    复习整理一下PollardRho的相关知识把,刚好密码,acm都要用 Miller Rabin素性检验 Miller Rabin素性检验是一种素数判定的法则,由CMU的教授Miller首次提出,并由希 ...

  5. 一起来读书361- 应用密码学:第十一章 数学背景

    摘要 密码学的数学背景 详情 知识点 1.信息量(amount of information):假设信息是等可能的,对消息中所有可能的值进行编码所需要的最小位数 2.语言信息率(rate of lan ...

  6. 杭电oj题目题型分类(转)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  7. HDOJ题目分类大全

    版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...

  8. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

  9. 【sigma 协议】

    文章目录 Schnorr 简介 使用场景 交互式 Schnorr 交互式Schnorr协议流程 零知识解释 安全性分析 非交互式Schnorr 非交互式Schnorr协议流程 安全性分析与非交互式 零 ...

  10. 椭圆曲线介绍(四):椭圆曲线安全性,与RSA对比

    内容来自ANDREA CORBELLINI的椭圆曲线密码学的介绍:Elliptic Curve Cryptography: a gentle introduction 本文是椭圆曲线介绍中的第四篇:椭 ...

最新文章

  1. weblogic10重置控制台密码
  2. 图解Reformer:一种高效的Transformer
  3. sysbench测试mysql性能(TPS、QPS、IOPS)(重要)
  4. 下班忘打卡了什么后果_工厂园区安装人脸识别门禁系统有什么好处?
  5. linux7yum安装mysql,CentOS7 使用yum安装mysql
  6. WCF并存Asp.net
  7. Rational Rose学习笔记01:安装与注册
  8. flask + apidoc 生成接口文档(附加一个坑)
  9. 《史蒂夫·乔布斯传》中文PDF文字版官方传记电子书下载
  10. 苹果cms V10 七色中文 二开苹果cms视频 图片 小说网站源码模板
  11. Linux E: 无法定位软件包
  12. 【Latex系列】括号用法总结
  13. vht160什么意思_802.11n 中HT20 HT40是什么意思
  14. odoo:开源 ERP/CRM 入门与实践 -- 上海嘉冰信息技术公司提供咨询服务
  15. 思维导图(二):绘制规则
  16. php还款功能,智能还款的原理
  17. java计算机毕业设计-线上自助旅游报名网-源程序+mysql+系统+lw文档+远程调试
  18. anyRTC RTSP转WebRTC方案
  19. IntelliJ IDEA 如何实现代码展示自动换行
  20. 【计算机毕业设计】超市管理系统

热门文章

  1. 【51nod】---1278 相离的圆(二分排序)
  2. 磁感应强度、磁场强度、磁动势之三者间的关系
  3. android 加速度模块,Android传感器API之:加速度Accelerometer功能源码
  4. EPUB电子书阅读与制作
  5. 计算机与昆虫关系的论文,趣味昆虫学论文 昆虫与人类的关系
  6. 互联网巨头“死磕”不放弃的社交赛道还有生意吗?
  7. Pt100 三线电桥接法,三线横流源接法分析
  8. 在WIN10中配置conda
  9. 一款黑苹果系统引导工具,系统来解Clover带来的限制和问题
  10. 使用友盟进行app的增量更新