关于素数测试
素数测试就是判断一个整数是素数还是合数。一般判断素数p的方式是通过判断2到根号p内的整数是否可以整除p来实现。时间复杂度为O(p1/2)。如果p是一个m位二进制整数,m=floor(Ig(p+1)),O(p1/2)=O(2m/2)。
然而对于大整数而言,这样的时间复杂度显然是不可以接受的。
费马小定理:if n is prime ∀a∈Zn∗ , an−1≡1(modn)if\space n\space is\space prime\space\space\space\forall a\in Z_n^{*}\space,\space a^{n-1}\equiv1\pmod nif n is prime ∀a∈Zn∗ , an−1≡1(modn)
所以判断n素数性的另一种办法是,从Z+n={1,2,3,…,n-1}(因为如果n是素数,则Z+n=Z*n)中选择一个数a,如果不满足an−1≡1(modn)a^{n-1}\equiv1\pmod nan−1≡1(modn),则说明这个数是合数。
可惜的是,通过费马小定理判断素数的方式是"几乎可行“的。下面介绍伪素数的概念,if is composite,∃a,an−1≡1(modn)if\space is\space composite,\exists a,a^{n-1}\equiv1\pmod nif is&nbs