【密码学】Pollard‘s p-1素数分解算法
在这里我们选取的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素数分解算法相关推荐
- java什么叫用例_BigInteger的.isProbablePrime()的可能用例是什么?
问题 方法BigInteger.isProbablePrime()很奇怪;从文档中,这将告诉数字是否为素数,概率为1 - 1 / 2^arg,其中arg是整数参数. 它已经存在于JDK很长一段时间了, ...
- Diffie-Hellman密钥交换协议(Diffie-Hellman Key Exchange,简称DHKE)
文章目录 Diffie-Hellman密钥交换协议(Diffie-Hellman Key Exchange,简称DHKE) 一.密码学相关的数学基础 1. 素数(质数) 2. 模运算 3. 费马小定理 ...
- AKS算法说明与实现
AKS算法 CSDN内嵌LaTex不支持align环境,所以一些数学排版不好看,不爽哦. \quad 近几年最著名的就算AKS算法了.由三个印裔的哥们设计的(算法的名称取自他们的首字母).所以几年前就 ...
- 因子分解算法——Pollard 的p-1方法
因子分解算法--Pollard 的p−1p-1p−1方法 1 算法核心 为了分解合数nnn.设数nnn的一个因子是ppp,若p−1p-1p−1的每个因子qqq满足q≤Bq\le Bq≤B(B是自己选的 ...
- 简述大数分解算法Pollard Rho和Pollard p-1
大数分解问题其实至今都是一个世界级难题,最常见的分解法是从2一直找到sqr(N),作为一个密码学专业的学生,每次看到别人这么做来进行因子分解,自己都控制不住想要制止他,因为这个算法的效率简直太太太太太 ...
- 数学--数论--随机算法--Pollard Rho 大数分解算法 (带输出版本)
RhoPollard Rho是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:MillerRabinMillerRabin素数测试. 操作流程 首先,我们先用MillerRabinMille ...
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第25篇]使用特殊的素数定义GF(p)和GF(2^n)的方法
这是一系列博客文章中最新的一篇,该文章列举了"每个博士生在做密码学时应该知道的52件事":一系列问题的汇编是为了让博士生们在第一年结束时知道些什么. 当实现密码学方案时,一个最频繁 ...
- 质数(素数) 与 加密(密码学上的应用)
--- ■定义 素数,一个大于1的自然数, 只能被1和他本身整除的数. 最小的素数是2 ■扩展1 哥德巴赫1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成三个质数之和 欧拉的版本 ...
- Poj 1811 Prime Test 素数测试 Miller-Rabin 与 整数的因子分解 Pollard rho
随机化算法,想尝试自己写一下,最后还是变成了抄代码... 代码参考了:POJ 1811 Prime Test(大素数判断和素因子分解) - kuangbin - 博客园 学习链接: Miller-Ra ...
最新文章
- android 拖动的view,Android实现随意拖动View效果
- 我所理解的Java NIO
- linux如何使用vim显示行号语法高亮,(.vimrc简单使用)
- UNITY ET 框架
- AE物体表面跟踪特效合成高级插件:Lockdown for Mac 支持ae2021
- arch linux 时间,archlinux入门--设置时钟 - webdancer's Blog
- 数据库-临时表和复制表
- 利用XML文件的一个写日志的类!!!!!
- jmp怎么做合并的箱线图_JMP和Minitab的图形分析
- 更改Word文档中自带插入公式中的字体解决方案
- 生物素-磺酸-NHS 酯,119616-38-5,Biotin-Sulfo-NHS ester
- 基于FPGA的AD9854并行接口驱动(VerilogHDL语言)
- Android 广播接收不到短信问题,Android中短信的广播接收问题
- NO.79——BFS,DFS,Astar,爬山法,最抖爬山法,模拟退火法解决八数码问题Python实现
- 上海交通大学安泰经济与管理学院荣获WRDS-SSRN创新奖
- 怎么压缩图片大小?建议收藏这些方法
- 揭秘诈骗团伙通过裸聊软件实施敲诈勒索
- HTML+CSS美食静态网页设计——八大菜系介绍舌尖上的美食5页
- Python基础入门之切片
- gpio_typedef_超经典的STM32学习笔记——第一章GPIO口