LeetCode - Count Primes

Count Primes

2015.4.30 15:51

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

Solution:

  Sieve of Eratosthenes.

Accepted code:

 1 // 2CE, 1MLE, 1RE, 1AC, trial and error
 2 #include <cstring>
 3 using namespace std;
 4 
 5 const int N = 2000000;
 6 int b[N + 1], c[N + 1];
 7 bool once = false;
 8 
 9 class Solution {
10 public:
11     Solution() {
12         Eratosthenes();
13     }
14     
15     int countPrimes(int n) {
16         return n > 0 ? c[n - 1] : 0;
17     }
18 private:
19     void Eratosthenes() {
20         if (once) {
21             return;
22         }
23         
24         int i, j;
25         
26         memset(b, 0, (N + 1) * sizeof(int));
27         memset(c, 0, (N + 1) * sizeof(int));
28         b[0] = b[1] = 1;
29         for (i = 2; i <= N / i; ++i) {
30             if (b[i]) {
31                 continue;
32             }
33             for (j = i; j <= N / i; ++j) {
34                 b[i * j] = 1;
35             }
36         }
37         for (i = 1; i <= N; ++i) {
38             c[i] = b[i] ? c[i - 1] : c[i - 1] + 1;
39         }
40         once = true;
41     }
42 };

 

你可能感兴趣的:(LeetCode)