原代碼兩個關鍵錯誤:
#include
#include
int isPrime(int n) {
if (n < 2) return 0;
int limit = (int)sqrt(n);
for (int i = 2; i <= limit; ++i)
if (n % i == 0) return 0;
return 1;
}
int main(void) {
int count = 0;
for (int i = 20; i <= 700; ++i)
if (isPrime(i)) ++count;
printf("20~700 共有 %d 個質數\n", count);
return 0;
}
20~700 共有 116 個質數
#include
#include
#include
int main(void) {
const int MAX = 700;
bool isPrime[MAX + 1];
memset(isPrime, 1, sizeof(isPrime));
isPrime[0] = isPrime[1] = false;
for (int i = 2; i * i <= MAX; ++i)
if (isPrime[i])
for (int j = i * i; j <= MAX; j += i)
isPrime[j] = false;
int count = 0;
for (int i = 20; i <= 700; ++i)
if (isPrime[i]) ++count;
printf("篩法結果: %d\n", count); // 同 116
return 0;
}
修正邏輯錯誤並加上標頭檔,程式即可正確輸出區間質數個數。