182.Count Primes

题目:

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

计算小于非负数n的素数的数量。

Example:

Input: 10
Output: 4
Explanation: There are 4 prime numbers less than 10, they are 2, 3, 5, 7.
说明:有4个素数小于10,它们是2,3,5,7。

解答:

方法一:超时

 1 class Solution {
 2     public int countPrimes(int n) {
 3         int res=0;
 4         for(int i=0;i<n;i++){
 5             if(isPrimes(i))
 6                 res++;
 7         }
 8         return res;
 9     }
10     
11     private boolean isPrimes(int num){
12         if(num<2) return false;
13         for(int i=2;i*i<=num;i++){
14             if(num%i==0)
15                 return false;
16         }
17         return true;
18     }
19 }

方法二:

 1 class Solution {
 2     public int countPrimes(int n) {
 3         boolean[] notPrime=new boolean[n];  //假设全都是素数,boolean默认值全为false
 4         int count=0;
 5         for(int i=2;i<n;i++){
 6             if(notPrime[i]==false){
 7                 count++;
 8                 for(int j=2;i*j<n;j++)
 9                     notPrime[i*j]=true; //素数的倍数都标记成不是素数
10             }
11         }
12         return count;
13     }
14 }

详解:

判断素数:埃拉托斯特尼筛法

遍历2到根号n,将质数2的全部倍数标记出来(不包括2),将质数3的全部倍数标记,一直到根号n,此时未被标记的就是质数。

posted @ 2018-09-20 16:39  chan_ai_chao  阅读(103)  评论(0编辑  收藏  举报