热门问题
时间线
聊天
视角
费马素性检验
来自维基百科,自由的百科全书
Remove ads
费马素性检验是一种素数判定法则,利用随机化算法判断一个数是合数还是可能是素数。
概念
根据费马小定理:如果 是素数,,那么
- 。
如果我们想知道 是否是素数,我们在中间选取 ,看看上面等式是否成立。如果对于数值 等式不成立,那么 是合数。如果有很多的a能够使等式成立,那么我们可以说 可能是素数,或者伪素数。
在我们检验过程中,有可能我们选取的 都能让等式成立,然而 却是合数。这时等式
被称为Fermat liar。如果我们选取满足下面等式的a
那么 也就是对于 的合数判定的Fermat witness。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
最小的 值 | 4 | 341 | 91 | 15 | 4 | 35 | 6 | 9 | 4 | 9 | 10 | 65 | 4 | 15 | 14 | 15 | 4 | 25 | 6 | 21 | 4 | 21 | 22 | 25 | 4 | 9 | 26 | 9 | 4 | 49 |
Remove ads
算法以及运行时间
整个算法可以写成是下面两大部:
- 输入: 需要检验的数;:参数之一来决定检验需要进行的次数。
- 输出:当 是合数时输出合数,否则输出可能是素数:
- 重复 次:
- 在 范围内随机选取
- 如果 那么返回合数
- 返回可能是素数
若使用模指数运算的快速算法,这个算法的运行时间是 ,这里 是一个随机的 需要检验的次数, 是我们想要检验的数。
Remove ads
缺点
众所周知,对于卡米歇尔数 ,全部令 的 都是费马骗子数(Fermat liars)。尽管卡米歇尔数很是稀有,但是却足够令费马素性检验无法像如米勒-拉宾和Solovay-Strassen的素性检验般,成为被经常实际应用的素性检验。
一般的,如果 不是卡米歇尔数,那么至少一半的
是费马证人数(Fermat witnesses)。在这里,令 为费马证人数、 为费马骗子数。那么
所有的都是费马证人数。
Remove ads
应用
参见
参考
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Section 31.8: Primality testing. Introduction to Algorithms Second. MIT Press; McGraw-Hill. 2001: 889–890. ISBN 0-262-03293-7.
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads