Description:
Count the number of prime numbers less than a non-negative number, n.
1 int countPrimes(int n) { 2 bool *isprime = (bool*)malloc(n*sizeof(bool)); 3 int i,j; 4 int count; 5 if(n <= 2) 6 return 0; 7 if(n == 3) 8 return 1; 9 count = n - 2; //去掉1不是素數,2是素數,剩下的conut計算素數的個數,就是減去3到n之間的合數 10 for(i = 3; i < n; i++) 11 { 12 if(i % 2) 13 isprime[i] = true; 14 else{ //總數去掉2的冪數的數 15 isprime[i] = false; 16 count--; 17 } 18 } 19 for(i = 3; i * i <= n; i++) //這裡判斷到n的開方,是因為i到i*i之間所有的數都會被判斷到 20 { 21 if(isprime[i]) //當i是質(素)數的時候,i的所有的倍數必然是合數 22 { 23 for(j = i*i; j < n; j+=i) 24 if(isprime[j]) //j從i*i 開始判斷,因為i *(i-1)已經判斷過了 25 { 26 isprime[j] = false; 27 count--; //總數去掉為合數的數 28 } 29 } 30 } 31 free(isprime); 32 return count; 33 34 }