1. 程式人生 > >第十四題:計數質數

第十四題:計數質數

問題描述

統計所有小於非負整數 n 的質數的數量。

示例:

輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

解決方式

埃拉託斯特尼篩法在每次找到一個素數時,將能被素數整除的數排除掉。

給出要篩數值的範圍n,找出以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;

再用下一個質數,也就是3篩,把3留下,把3的倍數剔除掉;

接下去用下一個質數5篩,把5留下,把5的倍數剔除掉;

不斷重複下去…。

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

執行結果展示

在這裡插入圖片描述