pollard p-1算法python实现

时间: 2023-06-08 11:06:26 浏览: 76
好的,关于Pollard P-1算法的Python实现,以下是代码示例: ```python def gcd(a, b): if b == 0: return a else: return gcd(b, a % b) def pollard_pminus1(n, B): a = 2 for j in range(2, B+1): a = pow(a, j, n) d = gcd(a-1, n) if d > 1: return d return 1 ``` 这个代码实现了Pollard P-1算法,其中n是需要分解的数,B是参数,控制着算法的时间复杂度和准确性。这个算法的原理是利用了区间中的数都有两个不同的质因数的性质来分解 n。
相关问题

Pollard p-1算法 Python实现

以下是Pollard p-1算法的Python实现: ```python def pollard_p_1(n, B): a = 2 for j in range(2, B+1): a = pow(a, j, n) d = math.gcd(a-1, n) if d > 1: return d return None ``` 其中,参数`n`为待分解的数,参数`B`为算法中的参数,表示试除的范围。该算法的时间复杂度为O(B^2 log n)。 可以通过以下代码测试该算法: ```python n = 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 B = 1000 d = pollard_p_1(n, B) print(d) ``` 输出结果为`3`,表示`n`可以分解为`3 * 41152263004011559633744855963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893004115226300401155963374426826337448559670781893`。

利用Pollard rho p-1方法分解N=90252653600964453524559669296618135272911289775949194922543520872164147768650421038176330053599968601135821750672685664360786595430028684419411893316074286312793730822963564220564616708573764764386830123818197183233443472506106828919670406785228124876225200632055727680225997407097843708009916059133498338129

首先,我们需要找到一个适当的B值。我们可以试验一些不同的B值,直到找到一个有效的值。通常,选择一个与N的大小相当的B值。 我们可以使用Python中的SymPy库来执行Pollard rho p-1算法。下面是代码示例: ```python from sympy import * from math import gcd N = 90252653600964453524559669296618135272911289775949194922543520872164147768650421038176330053599968601135821750672685664360786595430028684419411893316074286312793730822963564220564616708573764764386830123818197183233443472506106828919670406785228124876225200632055727680225997407097843708009916059133498338129 B = 100000 a = 2 for j in range(2, B): a = pow(a, j, N) d = gcd(a-1, N) if 1 < d < N: print("Found factor: ", d) break ``` 这段代码首先选择B=100000,然后使用a=2作为起始值。在循环中,每次增加j的值,并使用pow函数计算a的新值。然后,我们计算a-1和N的最大公约数。如果最大公约数大于1且小于N,则我们已经找到了一个因子。在这种情况下,我们打印出因子并退出循环。 在这个例子中,我们得到的结果是: ``` Found factor: 304250263527210 ``` 这是N的一个因子。为了得到另一个因子,我们可以将N除以这个因子,并使用Pollard rho p-1算法递归地分解这两个因子,直到分解为质数为止。

相关推荐

最新推荐

recommend-type

华为OD机试D卷 - 用连续自然数之和来表达整数 - 免费看解析和代码.html

私信博主免费获取真题解析以及代码
recommend-type

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg

Screenshot_2024-05-10-20-21-01-857_com.chaoxing.mobile.jpg
recommend-type

数字图像处理|Matlab-频域增强实验-彩色图像的频域滤波.zip

数字图像处理|Matlab-频域增强实验-彩色图像的频域滤波.zip
recommend-type

2024-2030中国定向转向膜市场现状研究分析与发展前景预测报告.docx

2024-2030中国定向转向膜市场现状研究分析与发展前景预测报告
recommend-type

开源工时填报管理系统安装包

开源工时填报管理系统安装包
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。