埃氏筛法
埃氏筛法,全名埃拉托斯特尼筛法 若一个数是素数,那么必然不可能存在有除
1和它自身的因子,也就是比它小的数(除了1)都无法整除它 那么,从小到大遍历除1外的正整数,将所有素因子的倍数都标记上,如果遍历到一个数i,它没有被标记,那么它就是素数;初始时,notprime[2]=false(即2是素数):c++bool notprime[MAXN]; void getPrime() { for (int i = 2; i < MAXN; ++i) { if (!notprime[i]) { // 说明它是素数 for (int j = 2; i * j <= MAXN; ++j) { notprime[i * j] = true; } } } }可以简单地写出时间表达式:
,为小于或等于
MAXN的最大质数,证明过程是很难的,只需要知道埃氏筛法的时间复杂度为即可 也就是说,在数量级内,且需要快速判断一个大范围内的素数时,埃氏筛法是有效的