素性测试与卡米歇尔数
素数是整数中优美的一部分,辣怎么判别一个大数是不是素数呢?
费马小定理告诉我们 ap≡a ( mod p) a p ≡ a ( m o d p )
首先,不满足上式的数,一定不是素数。
但当你尝试了许多 a a 之后发现都满足上式,也不能断言就是素数。
对于大部分小的合数 n n ,你会发现选取的大部分,都不满足费马小定理
但是!还是有一些合数,比如 561=3∗11∗17 561 = 3 ∗ 11 ∗ 17 ,对所有的 0≤a<561 0 ≤ a < 561 ,发现都满足费马小定理!
下面证明一下,要证明
a561≡a (mod 561)
a
561
≡
a
(
m
o
d
561
)
,只要证明
为什么呢?因为若第一个式子成立,则 3 | a561−a 3 | a 561 − a ,同理11,17也整除,由于3,11,17互质,则561也整除。
对于第一个式子,若3能整除a,则显然成立;否则,由于 a2≡1 (mod 3) a 2 ≡ 1 ( m o d 3 ) ,则 a561=a2∗280+1=(a2)280∗a≡1∗a≡a (mod 3) a 561 = a 2 ∗ 280 + 1 = ( a 2 ) 280 ∗ a ≡ 1 ∗ a ≡ a ( m o d 3 )
后面两个式子同理。
从而 561 561 很特殊!
类似这样的数,称为卡米歇尔数。 http://oeis.org/A002997/b002997.txt
一些猜想:
- 卡米歇尔数都是奇数
- 卡米歇尔数是不同素数的乘积
证明1. 由于 an≡a (mod n) a n ≡ a ( m o d n ) ,令 a=n−1 a = n − 1 ,则可得 (−1)n≡−1 (mod n) ( − 1 ) n ≡ − 1 ( m o d n ) 则 n n 是奇数。
证明2. 假设卡米歇尔数的任意一个素因子(次幂)为 ,下面我们努力证明 e= e = 0,
将 pe p e 带入 an≡a (mod n) a n ≡ a ( m o d n ) ,得到 pen≡pe (mod n) p e n ≡ p e ( m o d n ) ,所以 n | pen−pe n | p e n − p e ,又 pe+1 | n p e + 1 | n ,所以 pe+1 | pen−pe p e + 1 | p e n − p e
从而 e=0 e = 0 。证毕。
定理19.1(卡米歇尔数的考塞特判别法) 设n是合数,则n是卡米歇尔数当且仅当它是奇数,且整除n的每个素数 p p 满足下述两个条件:
- 不整除n
- p−1 p − 1 整除 n−1 n − 1 (实际上也整除 np−1 n p − 1 )
证明:
- 充分性: 类似上面证明561是卡米歇尔数。
- 必要性: 前面已经证明卡米歇尔数是奇数且 p2 p 2 不整除 n n ,只要说明即可。(用原根比较方便?)
存在无穷多个卡米歇尔数(1994年证明)
卡米歇尔数的存在意味着我们需要更好的素性测试方法。
合数的miller_rabin测试是基于以下事实的:
定理19.2(素数的一个性质) 设 p p 是奇素数,记 , q q 是奇数,设是不被 p p 整除的任何数,则下述两个条件之一一定成立,但满足条件之一的数不一定是素数(卡米歇尔数):
- 模 p p 余1
- 数之一模
p
p
余
证明: 费马小定理告诉我们 ap−1≡1 (mod p) a p − 1 ≡ 1 ( m o d p ) 。这意味着对于数表 aq,a2q,a22q,...,a2k−1q,a2kq a q , a 2 q , a 2 2 q , . . . , a 2 k − 1 q , a 2 k q ,最后一个数模 p p 余1,且表中的每个数是前一个数的平方。因此下述两种可能之一必成立:
- 表中的第一个数模余1
- 表中的一些数模 p p 不余1,但是,当平方时它就模余1,所以该数是 −1(mod p) − 1 ( m o d p ) ,即表包含 −1(mod p) − 1 ( m o d p )
证毕。
定理19.3 miller_rabin测试 设 n n 是奇素数,记, q q 是奇数,对不被整除的某个 a a ,如果下述两个条件都成立,则一定是合数:(但有不成立的也不一定是素数)
- aq≢1 (mod n) a q ≢ 1 ( m o d n )
- 对所有的 i=0,1,2,...,k−1,a2iq≢−1 (mod n) i = 0 , 1 , 2 , . . . , k − 1 , a 2 i q ≢ − 1 ( m o d n )
和费马小定理测试相比,miller_rabin测试不存在“卡米歇尔型数”,因为可以保证,如果 n n 是奇合数,则1~n-1之间至少有75%的数可作为miller_rabin的证据。即这些数作为时,可以说明其合数性。
换句话说,每个合数都有许多证据来说明它的合数性。
例如随机选取 a a 的100个值,若其中没有的miller_rabin证据,则 n n 是合数的概率小于