随机化素性测试

原创 2015年11月21日 13:48:10

这是之前看《算法之道》中提及的一个问题。
书中提到的素性测试依赖的理论基础是费马小定理。
定理表述为:如果p是素数,则对于任意整数aapa可以被p整除。
用模算术表示为:
apamodp
同时,因为我们架设p是素数,分解:
apa=a(ap11)
如果a不包含因子p,那ap11一定包含因子p
那么用模算术表示为:
ap11modp


所以如果我们如果要验证n是否为素数,
我们可以选取小于n的正整数a去判断费马小定理是否成立。
如果小定理不成立,那n一定不是素数,
但是如果小定理成立,却不能判断n一定是素数。
也就是说某些合数一样能通过随机化的素性测试。
如果n是合数,那么绝大部分a都不能通过素性测试。


但是卡米克(Carmichael)数是一种能通过所有费马小定理测试。
但是这种数极其稀少,所以如果我们不考虑卡米克数。
书中就说到一个用蒙特卡罗算法来进行素性测试。
并可以使得错误的概率达到任意小的程度。


但是书说了这么一个引理:
如果存在一个相对n为素的a,使得an11modn
则小于n的所有数里至少存在一半(n/2)满足这种条件的整数。


证明:
如果存在整数a,有 an11modn
则对于任意小于n且满足飞马小定理测试的b
整数ab也将使得费马小定理不成立:
(ab)n1an1bn1an11modn


尼玛,这个证明能得出如上结论么?
在我看来最多只能证明,如果已经存在一个a不能通过素性测试。
那么,只要存在一个数b,通过素性测试,
就一定存在一个数ab,不能通过素性测试。
也就是说能通过素性测试的数一定小于通不过的数,这个我认同。
但是作者加强了条件:
<n的所有数里,能通过素性测试的一定少于通不过测试的数。
至少我觉得这个结论也许是对的,但是如上的证明是不够的。
上面的证明没有无法说明ab也在<n的范围内。


写在最后:
说实在的,如果n很大,除非进行大数运算。
素性测试的计算量非常大,就算n很小,比如n取10001,a取2,
210001已经是一个非常巨大的数。

关闭Linux 内存地址随机化机制

关闭Linux 内存地址随机化机制, 禁用进程地址空间随机化.可以将进程的mmap的基址,stack和vdso页面地址固定下来. 可以通过设置kernel.randomize_va_space内核参数...
  • force_eagle
  • force_eagle
  • 2012年09月27日 13:02
  • 6931

栈随机化

 为了防止入侵者通过缓冲区溢出进行攻击,linux系统实现了栈随机化技术。 如下代码用于打印出main函数局部变量的地址: #include   int main(...
  • swordmanwk
  • swordmanwk
  • 2014年12月20日 19:39
  • 1546

算法导论程序14-快速排序的随机化版本(Python)

与始终采用A[r]作为主元的方法不同,随机抽样是从子数组A[p...r]中随机选择一个元素作为主元。 首先将A[r]与A[p...r]中随机选出的一个元素进行交换,通过对序列p,,,,r的随机抽样,...
  • zhang_xiaomeng
  • zhang_xiaomeng
  • 2017年05月24日 14:11
  • 147

经典算法--快速排序的随机化版本

一般的快速排序,在最坏的
  • ccy0815ccy
  • ccy0815ccy
  • 2014年04月08日 20:42
  • 1363

进程内存地址随机化--与位置无关

与位置无关码即每次运行地址不一样,分为两种,一种是动态连接库,一种是与位置无关的应用程序。如果程序每次运行内存地址不一样,那么就能提升一定的安全性。 1. 动态库     在编译的时候加上-PIC选项...
  • fengel_cs
  • fengel_cs
  • 2017年03月09日 16:28
  • 391

地址空间布局随机化(Address Space Layout Randomization)与缓冲区溢出攻击

记得以前在Linux下做缓冲区溢出攻击的实验,用了两台机器,一台装RedHat 8.0,另一台装RedHat 9.0,发现一个奇怪的现象。RedHat 8.0的栈基地址是固定的,而RedHat 9.0...
  • Solstice
  • Solstice
  • 2006年08月11日 17:13
  • 9500

poj3318(随机化算法)

链接:点击打开链接 题意:给出三个n*n的矩阵A,B,C,问是否存在A*B=C(n 代码:#include #include #include #include #include #in...
  • stay_accept
  • stay_accept
  • 2017年04月09日 14:17
  • 263

Miller-Rabin素性测试算法详解

看了一些别人的博客,发现里面涉及到的公式没有证明,于是就打算自己写一篇比较详细的讲解。 先看两个引理及其证明(建议把证明搞懂)。 PS:以下图片均为作者用wps制作,如想使用请附上作者博客链接,谢谢O...
  • ECNU_LZJ
  • ECNU_LZJ
  • 2017年05月24日 14:54
  • 632

linux溢出总结+windows aslr地址随机化绕过

实验一 Linux下缓冲区溢出 通过缓冲区溢出漏洞执行自己的代码 【实验代码】 【实验目的】 通过缓冲区溢出,使其执行not_called函数。 【实验原理及结果】 (1)编...
  • sunno_ya
  • sunno_ya
  • 2016年05月06日 11:16
  • 2258

素性测试

今天在看《算法之道》一书,
  • achenwenping
  • achenwenping
  • 2014年05月15日 10:27
  • 330
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:随机化素性测试
举报原因:
原因补充:

(最多只允许输入30个字)