素数判定算法
(当且仅当n为素数时,最终输出数才为素数)
lnput: integer n>1
1.if (n is of the form a^b, b>1)output COMPOSITE;
2.R=2
3.while (r<n) {
4. if(ged(n,r)≠1) output COMPOSITE;
5. if(r is prime)
6. let q be the largest prime factor of r-1
7. if(q≥4^r/2 logn)and (n(r-1)/q≠1(mod r))
8. break;
9. r←r+1;
10. }
11.for a=1 to 2r^1/2 logn
12. if ((x-a)^n≠(x^n-a)(mod x^r-1,n))output COMPOSITE;
13.output PRIME;
算法的大意是这样吧:
如果 n 是a^b 这种形式, 其中b>1,则n不是素数;
r从2开始到n-1,
如果ged(n,r)≠1说明n不是素数;
如果r是素数,
小于 r 的最大素数 q 满足 q≥4^r/2 logn)and (n(r-1)/q≠1(mod r)时,或者直到r=n时,
再判断:如果(x-a)^n≠(x^n-a)(mod x^r-1,n),其中a=1 to 2r^1/2 logn,则说明n不是素数;
否则n是素数