首页 > 编程语言 >素性测试--Miller-Rabin算法

素性测试--Miller-Rabin算法

时间:2023-08-29 13:22:44浏览次数:54  
标签:gcd -- Miller 合数 素数 测试 米勒 mod Rabin

引子

今天(23/8/16),老师问了一个有趣的问题:

出道题给大家, 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111131111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 是不是素数?怎么检测?


自己去查了一下相关的一些验证大整数素数的方法,对于其中的Miller-Rabin算法与椭圆曲线确定性算法着手实现了一下,由于这个数字位数还是有点大的,加上这两种算法都是一种概率性测试,两种得出的结果出现了差异(椭圆曲线出了个合数结果)……最后用sagemath验证了一下,给出的结果是素数

这篇就对这两种算法中的Miller-Rabin以初步认识的视角来写一下,当然会很烂啦……

更新(23/8/17):
老师提醒我CINTA里有……
(刚看到第三章
有点为了解决问题而做事了,对定理没有理解得很好还把费马小定理和拉宾测试混在一起了……
老老实实回归教材。

费马小定理

ap-1\(\equiv 1 \pmod p\)
p为素数,a不为p的倍数
a 必须满足 gcd(a, n) = 1。

不完善

伪素数:
设 n ∈ Z 为合数,如果存在 a ∈ Z 且 gcd(a, n) = 1,使得下式成立:
a n−1 ≡ 1 (mod n)
则称 n 是以 a 为基的伪素数(Pseudoprime)。
对一个合数 n,大部分的整数 a < n 都使得等式 an−1 ≡ 1 (mod n) 成立

Carmichael数:设 n ∈ Z 为合数,对任意 a ∈ Z 且gcd(a, n) = 1,上式成立,则称 n 为 Carmichael 数,或称绝对伪素数。如561。
判定:设 n = q0q1 · · · qk 是一个合数,其中 k > 1,对任意 i,qi 是两两不同的素数且满足(qi − 1) | (n − 1)。则 n 是 Carmichael 数。

对这种数字进行检测,选中 a 且 gcd(a, n) = 1 的概率就很小,

完善:Miller-Rabin

米勒测试

q 是一个奇数,k 是某个正整数。设 a 是任意选取的整数,且 gcd(a, n) = 1。

如果以下两个条件其中之一得到满足:

  1. aq ≡ 1 (mod n)
  2. 存在某个 0 ≤ j ≤ k − 1,使得 a 2jq ≡ −1 (mod n)

则称 n 通过了以 a 为基的米勒测试。

证明:

费马小定理
有序列:
aq , a2q , a<4q , … a2k-1q

基本过程:

  1. 判断aq ≡ 1 (mod n) 或 aq ≡ −1 (mod n) 是否成立,成立则通过米勒测试
  2. 不成立则判断a2q≡-1(mod n)是否成立,成立则通过。
    a n−1 ≡ 1(mod n) 必然成立,a n−1=a 2jq,所以n必然会通过以a为基的米勒测试。

n 不通过米勒测试,则 n 必然是合数,但是如果 n 通过米勒测试,则只说明 n 可能是素数。以下,继续完善。

拉宾的贡献

通过 k 次不同的米勒测试,可以把合数误判为素数的的概率尽可能地降低。
任一次不通过,则 n 是合数,否则 n 就大概率是素数。

伪证据的数量
如果 n 是一个奇合数,则最多有 (n − 1)/4 个整数 a,1 ≤ a ≤ n − 1,使得 n 可以通过以 a 为基的米勒测试。

拉宾测试(估算所需测试次数)
如果 n 是一个奇合数,选取 k 个不同的整数 a,1 ≤ a ≤ n − 1,对 n 进行以 a 为基的米勒测试。则 n 通过所有 k 次米勒测试的概率小于 (1/4)k

标签:gcd,--,Miller,合数,素数,测试,米勒,mod,Rabin
From: https://www.cnblogs.com/sophiawxr/p/17636474.html

相关文章

  • code-runner 在外部终端中执行代码并暂停它
    修改配置文件settings.json"code-runner.executorMap":{"c":"cd$dir&&gcc$fileName-o$fileNameWithoutExt-finput-charset=UTF-8-fexec-charset=GBK&&startcmd\"/k;$fileNameWithoutExt\"",......
  • nodejs的安装及使用
    安装打开Node.js的官网并下载适用于你操作系统的安装包。Node.js提供了Windows、Mac和Linux的安装包。下载完成后,双击安装包运行安装向导。按照提示一步步进行安装。在安装过程中可以选择自定义安装路径,也可以使用默认路径【强烈建议安装在C盘】安装完成后,打开命令提示符(Windo......
  • The Riordan Group and Applications笔记
    2022年的一本书,只有376页。证明直接去书里面找。目录1介绍1.1啥是RiordanArray1.2源起和研究动机1.3基础的应用练习参考2系数抽取和生成函数2.1形式幂级数2.2系数抽取2.3拉格朗日反演定理2.4生成函数练习参考3RiordanGroup3.1RiordanArray和RiordanGroup3.2一些特殊......
  • DOS简单命令学习
    Win+r输入cmd回车运行。在任意文件夹里,按住shift+鼠标右键点击打开Powershell。资源管理器的地址栏前面+cmd+空格,打开该文件地址的cmd。 #DOS简单命令1.盘符切换:盘符+:2.查看当前目录下所有文件:dir3.切换目录:cd+/d+路径4.返回上一级:cd+..5.清理屏幕:cls6.退出:ex......
  • Proj CDeepFuzz Paper Reading: Deepxplore: Automated whitebox testing of deep lea
    Abstract背景:现有的深度学习测试在很⼤程度上依赖于⼿动标记的数据,因此通常⽆法暴露罕⻅输⼊的错误⾏为。本文:DeepXploreTask:awhite-boxframeworktotestDLModels方法:neuroncoveragedifferentialtestingwithmultipleDLsystems(models)joint-optimizationpro......
  • Web自动化
    第1章-Web自动化入门Web自动化测试1、自动化概念:由机器设备代替人工自动完成指定目标的过程优点:减少人工劳动力;提高工作效率;产品规格统一标准;规模化(批量生产)2、自动化测试软件测试:校验系统是否满足规定的需求、弄清预期结果与实际结果之间的差别概念:让程序代替人工去验......
  • 织梦tag怎么显示每个tag相应的文章数量
    有些时候我们想实现类似于wordpress那样的tag,就是在显示tag的链接和tag名的同时,还能显示每个tag关联的文章的数量。如下图所示:这就需要修改/include/taglib/tag.lib.php这个文件,找到第87行左右的“$row['link']=$cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";‘......
  • 015-管理后台框架布局搭建
    1.功能分析管理后台我们先看下大体页面布局如下包含左侧菜单栏,头部导航栏,tab窗体,还有内容显示区域,以及页脚.2.基本实现2.1.文件引入2.2.页面引入引入hplus下的index.html2.3.页面调整我们需要对css,js等做调整,可以使用thymeleaf方式引入<!--css相关调整--><linkrel="sho......
  • Mysql查询性能优化相关
    慢查询基本原因访问的数据太多分析是否检索了过多的数据。mysql服务器是否在分析大量超过需要的数据。注意事项尽量不用select*分页查询(mysql从设计上让连接和断开连接都是很轻量级的。运行多个小查询不是大问题)缓存效率高减少锁竞争查询的执行基础查询执行......
  • Git的使用
    git的单人操作进入gitee官网注册账号密码登录(在登录时要把自己的邮箱添加进去)点击个人主页=>找到个人设置并点击=>找到邮箱管理并点击=>新增邮箱目的:如果我们不使用自己的邮箱,那么git会自动给我添加一个邮箱(非常难记住)创建仓库找到+并点击找到新建仓库并点击填写仓......