题目
统计所有小于非负整数 n 的质数的数量。
示例:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
解法&思路
题目内容很简单,但是里面要掌握的知识点非常多。最优解法非常的巧妙。
- 何谓质数。一个数除了1和它本身能够整除它,其它数都不能够整除它。这个可以肯定,大于它的数更加不能整除它。那么我们可以据
- 何谓整除;假设2个正整数M,N,M>N;M/N没有余数,即M是N的整数倍。
如果我们按照定义的方法来判断一个数是否为质数,那么这个方法的计算量非常庞大,比如计算2^23-1是否是质数,需要判断20亿个数。
我刚开始的解法是:
public int countPrimes(int n) {
//int loopend = (int)Math.sqrt(n);
//List<Integer> pure = new LinkedList<Integer>();
Queue<Integer> pure= new LinkedList<>();
for(int i = 2;i < n ; i++){
boolean isPure = true;
Iterator<Integer> it = pure.iterator();
while (it.hasNext()){
int pre_pure = it.next();