首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言求第 n 到第 m 個素數之和:邏輯錯誤導致死循環與結果錯誤的修正

     編輯:程式設計綜合問答

原代碼核心問題

  1. 死循環:if (flag != 0) 放在雙層 for 循環外,導致 i 無法遞增,陷入無限循環。
  2. 計數邏輯錯誤:count 僅在 flag != 0 時遞增,但 flag 判斷位置錯誤,導致素數計數與求和脫節。
  3. 特殊情況處理缺失:2 是唯一偶素數,循環從 3 開始步長 2 更高效。

修正版代碼

#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% 的邏輯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved