Appearance
5.4.5 素数检验
下面将给出两个随机性素数检验方法, 它们对于检验大数的素数性质是有用的, 而且出错的概率足够小. 应用这些检验方法有可能在不知道素因子的情形下证明一个数不是素数.
1. 费马素数检验
设自然数
检验 设给定奇数
如果
,那么 不是素数. 如果
,并且 ,那么 对于基 的检验. 如果 不通过检验,那么 不是素数. 如果 通过检验,那么它可能是一个素数,但还必须对其他基进行检验,即对于 的其他值进行检验.
注 对于所有
如果
2. 拉滨-米勒素数检验
拉滨-米勒 (Rabin-Miller) 素性检验以下列命题 (*) 为基础:
设
对于某个
每个奇自然数
检验 选取
如果
,那么 不是素数. 如果
,那么计算序列 , 直到找到满足 的值为止. 序列的元素可以通过重复实施模 平方算出. 如果不存在这样的值,那么 不是素数. 不然 通过对于基 的检验.
因此 561 不是素数.
如果随机且独立地选取
3. AKS 素数检验
AKS 素性检验基于确定一个数是素数还是合数的多项式算法. 它是Agrawal, Kayal 和Saxena 于 2002 年发表, 同时它显然可以有效地检验任何自然数的素性.
这个检验方法基于下列命题:
如果
不被 的素数整除; 当
时, (符号 表示 “ 的最大整数”); 对于每个
,
那么
设
检验
核验
是否能被区间 中的自然数整除. 如果是,那么 不是素数. 不然,取素数
,使得 .(可以证明这样的素数 存在.) 核验当
时,同余式 是否成立. 若不成立,则 不是素数. 若成立,则 是一个素数幂. 在这种情形要检验是否存在自然数 和 ,使得 . 若不存在,则 是一个素数.
与已知的算法及有效性随机性算法不同, 这个检验的结果是可信的, 甚至没有可忽略的小的错误概率误差. 但在密码学中拉滨-米勒素数检验更合适.