LeetCode 204. Count Primes (质数的个数)

Description:

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

 


 题目标签:Hash Table

  题目给了我们一个n, 让我们找出比n小的 质数的数量。

因为这道题目有时间限定,不能用常规的方法。

首先建立一个boolean[] nums,里面初始值都是false,利用index 和 boolean 的对应,把所有prime number = false;non-prime number = true。

遍历nums array:(从index 2开始,因为1不是prime number)

  只对是false 的数字进行操作:

    1. 首先count,因为 false = prime number;

    2. 把 index(数字) * 2,3,4,....  去到对应的nums[index * 2,3,4...] 的位置里把 non-prime number 的值 改成 true。

      因为是从2 开始的,prime number 只能被1 和 自己所除, 换句话说 prime = prime * 1。所以两个 大于1 的数字 a * b 是不会找到 prime number 的。

 

 

Java Solution:

Runtime beats 81.95% 

完成日期:05/26/2017

关键词:boolean[] nums

关键点:遍历每一个prime number,利用这个number * 2,3,4... 把之后的non-prime标记出来

 1 class Solution 
 2 {
 3     public int countPrimes(int n) 
 4     {
 5         int count = 0;
 6         boolean[] nums = new boolean[n]; // prime = false; non-prime = true
 7         
 8         for(int i=2; i<n; i++) // iterate from 2 to (n-1)
 9         {
10             if(!nums[i]) // only access when this num is false
11             {
12                 count++; // if a num is false meaning this number is prime
13                 
14                 int m = 2; // multiplier
15                 while(i * m < n) // mark all the non-prime numbers
16                 {
17                     nums[i*m] = true;
18                     m++;
19                 }
20             }   
21         }
22         
23         return count;
24     }
25 }

参考资料:N/A

 

LeetCode 题目列表 - LeetCode Questions List

posted @ 2017-10-27 07:08  Jimmy_Cheng  阅读(342)  评论(0编辑  收藏  举报