参考:https://zh.wikipedia.org/wiki/米勒-拉宾检验

参考:https://oi-wiki.org/math/number-theory/prime/#millerrabin-素性测试

费马小定理:如果p是素数,a 不是 p 的倍数,那么 a^(p-1) = 1 mod p

二次探测定理:非常直观,如果 p 是素数,那么 x^2 = 1 mod p 的解 x 要不满足 x = 1 mod p,要不满足 x = -1 mod p。

以下是我用白话说的,严格的数学证明可以看那两个参考链接。

米勒-拉宾检验,就是检验一个数字 p 是不是素数。

如果 p 是素数,那么对于一个 小于 p 的数 a,有 a^(p-1) = 1 mod p

对 a^(p-1) 不断做开平方,直到不能开,中间得到的一系列数字(不包含 a^(p-1)本身),有两种情况。

所以米勒-拉宾检验,就是反着来,先把 a^(p-1) 开到不能开为止,然后再往回平方,看得到的数字是否满足前面说的规律。如果不满足,就一定不是素数。如果满足,那也不一定是素数。

具体来说,就是

用代码解释,就是