Eratosthenes计算小于100000的素数质数:时间复杂度是O(nloglogn)
算法原理
一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。
二、步骤
(1)先把1删除(1既不是质数也不是合数)
(2)读取队列中当前最小的数2,然后把2的倍数删去
(3)读取队列中当前最小的数3,然后把3的倍数删去
(4)读取队列中当前最小的数5,然后把5的倍数删去
…….
(n)读取队列中当前最小的状态为true的数n,然后把n的倍数删去
思路:用一个bool数组,存储n个数的状态,初始化都为true,然后从2开始,
如果2的状态为true,就开始遍历比n小的所有的2的倍数,将其全部置为false。把2的倍数遍历完后,继续往下找下一个状态为true的数,
即3,遍历比n小的所有的3的倍数(按3*3,3*4,3*5这样遍历,注意不需要从3*2开始了)。…..最后剩下的状态为true的数全为质数。
代码:
//求n以下的质数
#include<iostream></