随机化素性测试

原创 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已经是一个非常巨大的数。

相关文章推荐

利用费马小定理进行素性测试

利用费马小定理进行素性测试Description给出一个整数N,请利用费马小定理(Fermat’s Little Theorem)测试该数是否素数。 高精度乘法。高精度求余。快速幂。...

用费马小定理做素性测试

自大一以后再次用C,现在做一道OJ题用费马小定理判断素性 顺便把过程发上来吧 总结记录一下 #define _CRT_SECURE_NO_WARNINGS #include #include #i...

费马素性测试和米勒—拉宾素性测试

chapter 1 Fermat's little theorem  费马小定理   费马小定理说的是:如果p是一个素数,那么对于任意一个整数a,a p − a 能被p整除,也...

素性测试

素性测试主要使用了两个定理费马小定理 : 如果p是一个素数,且0 < a < p,则a ^ (p - 1) ≡ 1 (mod p)很不幸这个定理不是充分的。所以我们再补充一个定理来加强它。二次探测定理...

0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

1、蒙特卡罗算法       基本概述        蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方...

【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题 分类: 算法2013-07-05 13:59 215人阅读 评论(0) 收藏 举报 蒙特卡罗算法主元素问题...
  • pi9nc
  • pi9nc
  • 2013年08月03日 21:13
  • 2004

绕过PE文件地址随机化

  • 2017年11月21日 16:29
  • 2KB
  • 下载

由数组随机化排序引出的对于js中sort()方法的理解分析

由数组随机化排序引出的js中sort()方法的分析理解
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:随机化素性测试
举报原因:
原因补充:

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