b-a <= 1000
),可以用簡單的篩選法來實現。
#include <iostream>
#include <cmath>
using namespace std;
// 判斷一個數字是否為質數
bool isPrime(int n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}
int main() {
int a, b;
while (cin >> a >> b) {
int primeCount = 0;
for (int i = a; i <= b; ++i) {
if (isPrime(i)) {
++primeCount;
}
}
cout << primeCount << endl;
}
return 0;
}
isPrime(int n)
**:n
是否為質數。n
小於等於 1,則不是質數。n
小於等於 3,則是質數。n
能被 2 或 3 整除,則不是質數。for
迴圈從 5 開始檢查,步長為 6,檢查 n
是否能被任一小於等於 sqrt(n)
的數字整除。main()
**:a
和 b
。primeCount
為 0。for
迴圈從 a
遍歷到 b
,對每個數字調用 isPrime
函數進行檢查,如果是質數則計數器加 1。
3 7
6 6
30 50
3
0
5