首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言實例練習

C語言練習實例84:哥德巴赫猜想驗證(偶數分解為兩素數之和)

     編輯:C 語言實例練習

C語言練習實例84:哥德巴赫猜想驗證(偶數分解為兩素數之和)

本實例輸入一個偶數,嘗試將其分解為兩個素數之和(哥德巴赫猜想)。程序遍歷可能的素數對,找到第一組即輸出。

程序分析

  • 輸入驗證確保為偶數。
  • Isprimer() 函數判斷素數:小於 4 視為素數(注意 1 非素數,此處邏輯有瑕疵),偶數非素數,奇數試除至 sqrt(n)。
  • 主循環從 1 開始嘗試 i 和 n-i 是否均為素數。

源代碼

// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int Isprimer(unsigned int n);

int main() {
    unsigned int n, i;
    do {
        printf("請輸入一個偶數:\n");
        scanf("%d", &n);
    } while (n % 2 != 0);

    for (i = 1; i < n; i++)
        if (Isprimer(i) && Isprimer(n - i))
            break;

    printf("偶數%d可以分解成%d和%d兩個素數的和\n", n, i, n - i);
    return 0;
}

int Isprimer(unsigned int n) {
    int i;
    if (n < 4) return 1;          // 注意:1 不是素數,此處邏輯不嚴謹
    else if (n % 2 == 0) return 0;
    else
        for (i = 3; i < sqrt(n) + 1; i++)
            if (n % i == 0) return 0;
    return 1;
}

運行示例

請輸入一個偶數:
4
偶數4可以分解成1和3兩個素數的和

問題與修正

  • Isprimer(1) 返回 1 錯誤,應返回 0。建議修改為 if (n <= 1) return 0; if (n <= 3) return 1;。
  • 輸出 4=1+3 不符合素數定義,正確應為 4=2+2。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved