本實例輸入一個偶數,嘗試將其分解為兩個素數之和(哥德巴赫猜想)。程序遍歷可能的素數對,找到第一組即輸出。
Isprimer() 函數判斷素數:小於 4 視為素數(注意 1 非素數,此處邏輯有瑕疵),偶數非素數,奇數試除至 sqrt(n)。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;。