Miller-Rabin 和 Pollard-Rho 小记

news/2024/10/6 2:41:23/文章来源:https://www.cnblogs.com/abcdeffa/p/18286519

Miller-Rabin 可以帮助我们快速判断一个大数是不是质数,现在已经有了确定性算法。在 $2^{64}$ 范围内,我们可以快速地进行确定性判素。

> **二次校验定理**:若 $p$ 为奇质数,则 $a^x \equiv 1 \pmod p$ 的解为 $x = ±1$。

我们有这样的流程:

令 $d = p - 1$,然后不断检验 $a^d$,并令 $d \leftarrow \dfrac{d}{2}$,直到 $d$ 为奇数(注意这时要再检验一次)。

容易想到,我们可以随机一些 $a$ 并对其进行判断。可以证明的是,取前 12 个质数作为 $a$ 进行校验就可以在 $2^{64}$ 的范围内的确定一个数的素性了。

Pollard-Rho 可以帮助我们快速求出一个合数 $n$ 的质因子。它采用随机算法,

一开始时,$t = 0$,然后每次让 $t \leftarrow t^2 + c\;\text{mod}\;p$,其中 $c$ 为一个随机的常数。

这样得到的一群随机数会成环,样子很像 rho,所以得名 Pollard-Rho。

我们假设 $n$ 最小的质因子为 $m$,若连续两次生成的 $t$ 的差的绝对值在模 $m$ 意义下的值相同,那么这个差和 $n$ 的 gcd 就是一个 $n$ 的非平凡因子,由生日悖论,需要的 $t$ 的个数是 $O(\sqrt{m})$ 的,也就是 $O(n^{\frac{1}{4}})$ 的,因为 $m \leq \sqrt{n}$。

为了优化这个过程,我们采用倍增法,即枚举步长,在每段结尾算一遍 $\prod |t_i - t_0|$ 与 $n$ 的 gcd,并在每个步长的过程中每 $(2^k - 1)$ 次生成 $t$ 后求一遍 gcd,这里一般取 $k = 7$。

如果 gcd > 1,那么我们就成功找到了 $n$ 的一个非平凡因子,直接返回其值即可。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738935.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

氛围共处(Ambient Co-presence)丨RTE 共读计划

在同一个网络空间和情境下,营造一种微妙的、隐约感知的、实时同步的感觉。 加入「RTE 共读计划」: 重要的技术,往往是那些不易察觉却无所不在的技术。欢迎阅读「RTE 共读计划」的文章,我们希望通过本计划:• 挖掘到那些帮助人们跨越距离实时互动(Real-Time Engagement,R…

【已解决】pip已经安装好了模块,运行代码还是报错说没安装

在 Python 开发中,有时用 pip 安装了模块,运行代码时却提示没安装,这让人很困惑。下面来看看可能的原因和解决办法可能原因:1. 虚拟环境出错:如果用了虚拟环境,可能装错了地方,运行代码时用的环境没装这个模块。2. Python 版本不同:安装模块和运行代码的 Python 版本不…

# Day01

愿你自由如夏天的风,去实现所有开出花来的梦 Ctrl+C复制 Ctri+V粘贴 Crtl+A全选 Crtl+X剪切 Crtl+Z撤销 Crtl+S保存 …

关于平衡树(施工中)

关于Splay$\LARGE {一些无聊的定义}$ 二叉搜索树(BST树) 定义 二叉搜索树是一种二叉树的树形数据结构,其定义如下:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右子树不为空,则其右子树上所有点的附加权…

Linux 提权-SUID/SGID_1

本文通过 Google 翻译 SUID | SGID Part-1 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 了解特殊权限 2 寻找 SUID/SGID 二进制文件 – 手动方法2.1 枚举 SUID 二进制文件 2.2 枚举 SGID 二…

Java解析并修改JSON:将isShow属性改为false

哈喽,大家好,我是木头左!在Java中,可以使用各种库来处理JSON数据。其中,Jackson和Gson是两个非常流行且功能强大的库。在这篇文章中,将使用Jackson库来解析给定的JSON字符串,将其转换为Map对象,然后修改其中的"isShow"属性,最后再将其转回JSON字符串。 准备…

#cmd的常用命令(Dos)

cmd的常用命令首先win+r输入cmd并回车进入cmd命令中cd 命令:进入指定目录cd d:进入d盘目录.会发现进入不了d盘,因为cd只能在当前目录下操作不能跨区操作. 键入d:回车进入d盘.我d盘下有aaa文件夹cd aaa进入文件夹aaa目录下提示 ".."为上一级目录."."为当前…

StarRocks数据导入慢问题解决

一、问题描述依据StarRocks官网快速开始安装教程,用docker compose安装了starrocks,log模块从rabbitMq的队列批量获取log消息,发现队列消息有堆积,一晚上下来大概能对接4000条消息。经单元测试发现insert into到starrocks中时间竟然相差几百倍。 mysql每条insert sql执行3.…

CAN转PN网关模块连接激光切割机的配置方法

本文介绍了兴达易控CAN转Profinet网关模块(XD-PN_CAN20)用于连接CAN激光切割机的使用方法,激光切割机在工业生产中被广泛应用,而激光发射器与控制设备常以不同的协议存在两者之间,CAN总线和Profinet以各自的特点被广泛用于设备当中。本文将介绍介绍兴达易控CAN转Profinet网…

R语言、SAS潜类别(分类)轨迹模型LCTM分析体重指数 (BMI)数据可视化|附代码数据

全文下载链接: http://tecdat.cn/?p=26105 最近我们被客户要求撰写关于LCTM的研究报告,包括一些图形和统计输出。 在本文中,潜类别轨迹建模 (LCTM) 是流行病学中一种相对较新的方法,用于描述生命过程中的暴露,它将异质人群简化为同质模式或类别。然而,对于给定的数据集…

第二章 和式

记号 求和的符号有两种形式 第一种是确定界限的形式,也叫封闭形式,例如:\(\sum\limits_{k=1}^n a_k\) 第二种叫做一般形式,就是把一个或者多个条件写在 \(\sum\) 符号的下面,例如刚刚的例子可以写成 \(\sum\limits_{1\le k \le n} a_k\) 和式和递归式的转化 和式和递归式之…

Andriod SDK安装教程

前言 最简单的方式 我们使用ANDROID STUDIO这款开发工具下载对应的Andriod SDK。 可是我们如果不开发安卓,只是用它的一些SDK包的话而安装整个开发工具,就没必要了。 这里讲的是用独立的 命令行工具 来操作。 下载命令行工具 点击此处进入下载页面, 滑动到最下边,选择合适的…