费马测试被称为概率性素性测试,它判断的是“某个数是素数的概率大不大”。
如果P为素数,那么所有比P小的数Q都满足公式 QP mod P = Q ,即
例素数5的性质,比素数5小的数有4、3、2、1,那么:
45 (45=1024)mod 5 = 4
35 (35=243)mod 5 = 3
25 (25=32)mod 5 = 2
15 (15=1)mod 5 = 1
满足公式 QP mod P = Q 。
实际使用中不需要对所有的Q进行计算,只需要随机选取几组即可。
但反过来,如果所有Q都满足条件,P也不一定就是素数。例如数字561,我们又称之为伪素数,但这类数字存在的概率较少如下图所示:
参考:《我的第一本算法书》