if (flag != 0) 放在雙層 for 循環外,導致 i 無法遞增,陷入無限循環。count 僅在 flag != 0 時遞增,但 flag 判斷位置錯誤,導致素數計數與求和脫節。#include <stdio.h>
#include <math.h>
int is_prime(int n) {
if (n < 2) return 0;
if (n == 2) return 1;
if (n % 2 == 0) return 0;
for (int i = 3; i <= sqrt(n); i += 2)
if (n % i == 0) return 0;
return 1;
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
int sum = 0, count = 0;
for (int i = 2; count < m; i++) {
if (is_prime(i)) {
count++;
if (count >= n) sum += i;
}
}
printf("%d\n", sum);
return 0;
}
is_prime 函數,職責單一,邏輯清晰。count 同步推進,達到 n 起累加。sqrt(n)、步長 2。{} 對齊,便於閱讀與調試。輸入:2 4
素數序列:2(1st), 3(2nd), 5(3rd), 7(4th)
第2~4個素數:3+5+7 = 15
輸出:15 ✓
寫嵌套循環時,縮進對齊、花括號成對、變量作用域最小化,可避免 90% 的邏輯錯誤。