在这里我们选取的a是2,这样保证了与p互素。

另外补充一点,这个算法存在失败的可能,也就是说有可能找不到N的因子,但这并不妨碍N是个合数的事实。

只要B!取值合理,可以在多项式时间计算出结果。

但是B!必须满足"大于p − 1 p-1p−1的所有因子",如果p − 1的因子很大,选择小的B会造成算法求解失败,选择足够大的B才会增加算法成功的概率,但那样的话算法的复杂度不比试除法好,所以说算法的关键是选取合适的B。

C++代码:

#include <NTL/ZZ.h>using namespace NTL;
using namespace std;#include <iostream>
#include <cstdlib>
#include <math.h>
#include <time.h>
#include <stdlib.h>void pollard(ZZ N) {cout << "N可以分解为: ";while (1) {ZZ B = ZZ(10);ZZ a = ZZ(2);a = PowerMod(a, B, N);ZZ d = GCD(a - 1, N);if (d > 1 && d < N) {cout << d << " ";N = N / d;}else {cout << N;return;}}
}int main() {ZZ N;cout << "请输入待分解的数:";cin >> N;pollard(N);
}

Python代码:

#coding:utf-8
# author: Mitchell
import mathdef pollard(N):print('N可以分解为:')while 1:B=10a=2a=pow(a,B,int(N))d=math.gcd(a-1,int(N))if 1<d<N:print(d,end=' ')N=N/delse:print(int(N))breakn=int(input('请输入待分解的数:'))
pollard(n)

【密码学】Pollard‘s p-1素数分解算法相关推荐

  1. java什么叫用例_BigInteger的.isProbablePrime()的可能用例是什么?

    问题 方法BigInteger.isProbablePrime()很奇怪;从文档中,这将告诉数字是否为素数,概率为1 - 1 / 2^arg,其中arg是整数参数. 它已经存在于JDK很长一段时间了, ...

  2. Diffie-Hellman密钥交换协议(Diffie-Hellman Key Exchange,简称DHKE)

    文章目录 Diffie-Hellman密钥交换协议(Diffie-Hellman Key Exchange,简称DHKE) 一.密码学相关的数学基础 1. 素数(质数) 2. 模运算 3. 费马小定理 ...

  3. AKS算法说明与实现

    AKS算法 CSDN内嵌LaTex不支持align环境,所以一些数学排版不好看,不爽哦. \quad 近几年最著名的就算AKS算法了.由三个印裔的哥们设计的(算法的名称取自他们的首字母).所以几年前就 ...

  4. 因子分解算法——Pollard 的p-1方法

    因子分解算法--Pollard 的p−1p-1p−1方法 1 算法核心 为了分解合数nnn.设数nnn的一个因子是ppp,若p−1p-1p−1的每个因子qqq满足q≤Bq\le Bq≤B(B是自己选的 ...

  5. 简述大数分解算法Pollard Rho和Pollard p-1

    大数分解问题其实至今都是一个世界级难题,最常见的分解法是从2一直找到sqr(N),作为一个密码学专业的学生,每次看到别人这么做来进行因子分解,自己都控制不住想要制止他,因为这个算法的效率简直太太太太太 ...

  6. 数学--数论--随机算法--Pollard Rho 大数分解算法 (带输出版本)

    RhoPollard Rho是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:MillerRabinMillerRabin素数测试. 操作流程 首先,我们先用MillerRabinMille ...

  7. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第25篇]使用特殊的素数定义GF(p)和GF(2^n)的方法

    这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 当实现密码学方案时,一个最频繁 ...

  8. 质数(素数) 与 加密(密码学上的应用)

    --- ■定义 素数,一个大于1的自然数, 只能被1和他本身整除的数. 最小的素数是2 ■扩展1 哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成三个质数之和 欧拉的版本 ...

  9. Poj 1811 Prime Test 素数测试 Miller-Rabin 与 整数的因子分解 Pollard rho

    随机化算法,想尝试自己写一下,最后还是变成了抄代码... 代码参考了:POJ 1811 Prime Test(大素数判断和素因子分解) - kuangbin - 博客园 学习链接: Miller-Ra ...

最新文章

  1. android 拖动的view,Android实现随意拖动View效果
  2. 我所理解的Java NIO
  3. linux如何使用vim显示行号语法高亮,(.vimrc简单使用)
  4. UNITY ET 框架
  5. AE物体表面跟踪特效合成高级插件:Lockdown for Mac 支持ae2021
  6. arch linux 时间,archlinux入门--设置时钟 - webdancer's Blog
  7. 数据库-临时表和复制表
  8. 利用XML文件的一个写日志的类!!!!!
  9. jmp怎么做合并的箱线图_JMP和Minitab的图形分析
  10. 更改Word文档中自带插入公式中的字体解决方案
  11. 生物素-磺酸-NHS 酯,119616-38-5,Biotin-Sulfo-NHS ester
  12. 基于FPGA的AD9854并行接口驱动(VerilogHDL语言)
  13. Android 广播接收不到短信问题,Android中短信的广播接收问题
  14. NO.79——BFS,DFS,Astar,爬山法,最抖爬山法,模拟退火法解决八数码问题Python实现
  15. 上海交通大学安泰经济与管理学院荣获WRDS-SSRN创新奖
  16. 怎么压缩图片大小?建议收藏这些方法
  17. 揭秘诈骗团伙通过裸聊软件实施敲诈勒索
  18. HTML+CSS美食静态网页设计——八大菜系介绍舌尖上的美食5页
  19. Python基础入门之切片
  20. gpio_typedef_超经典的STM32学习笔记——第一章GPIO口

热门文章

  1. ZYNQ7000系列入门之GPIO点灯
  2. springboot 整合 camunda,访问 web 管理界面报错
  3. 科大讯飞语音引擎_科大讯飞发布智能录音笔SR502
  4. 《GPT-4技术报告》【中文版、英文版下载】
  5. 用友NC系统连接不到服务器,客户端连接不到服务器 _0
  6. 计算机学校用的哪种ps,经常用ps用什么配置电脑
  7. MySQL 8.0有什么新功能
  8. 软考高级 真题 2010年上半年 信息系统项目管理师 论文
  9. python、turtle实现泊松盘采样
  10. 【】jQuery 等技术 目录