IncredibleThings

导航

LeetCode - Count Primes

Count the number of prime numbers less than a non-negative number, n.

Example:

Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.

  

这里写图片描写叙述

这个图事实上就道出了这个算法是怎么进行的。使用一个长度是n的hash表,最開始这个hash表中的全部元素都是没有被处理的,从2開始遍历,假设这个元素没有被处理,那么将素数的个数加1,然后将2*2,2*3,2*4……2* k( 2* k < n)标记为已经被处理了的。接着開始处理3,同理将3*2,3*3,3*4…..3*m( 3 * m < n)标记为已被处理了的,接着是4,因为这个元素已经被处理。继续向后遍历。这样一直处理下去。

class Solution {
    public int countPrimes(int n) {
        int count = 0;
        boolean[] marked = new boolean[n];
        for (int i = 2; i < n; i++){
            if(!marked[i]){
                count++;
                for(int j = 2; j * i < n; j++){
                    marked[j*i] = true;
                }
            }
        }
        return count;
    }
}

 

posted on 2018-10-18 22:32  IncredibleThings  阅读(89)  评论(0编辑  收藏  举报