1 題目
功能:哥德巴赫猜想 描述: 任一大于2的整數(shù)都可寫成兩個質(zhì)數(shù)之和 驗證從 3 到 50 之間所有數(shù)都是否可以寫成兩個素數(shù)之和
2 思路
- 創(chuàng)建判斷是否為素數(shù)的函數(shù)
- 從 3 到 50 循環(huán)判斷是否可以有 2 個素數(shù)加和
3 代碼
#include <stdio.h>
#include <stdlib.h>
/**
功能:哥德巴赫猜想
描述:
任一大于2的整數(shù)都可寫成兩個質(zhì)數(shù)之和
驗證從 3 到 50 之間所有數(shù)都是否可以寫成兩個素數(shù)之和
**/
int ss(int i) { // 素數(shù)的判斷
int j;
if (i <= 1) // 小于1的數(shù)不是素數(shù)
return 0;
if (i == 2) // 2是素數(shù)
return 1;
for (j = 2; j < i; j++) { // 對大于2的數(shù)進(jìn)行判斷
if (i % j == 0)
return 0;
else if (i != j + 1)
continue;
else
return 1;
}
}
int main(int argc, char const *argv[]) {
int i, j, k, flag1, flag2, n = 0;
for (i = 3; i <= 50; i++)
for (k = 2; k <= i / 2; k++) {
j = i - k;
flag1 = ss(k); // 判斷拆分出的數(shù)是否是素數(shù)
if (flag1) {
flag2 = ss(j);
if (flag2) { // 如果拆分出的兩個數(shù)均是素數(shù)則輸出
printf("%d = %d+%d,\t", i, k, j);
n++;
if (n % 5 == 0)
printf("\n");
}
}
}
printf("\n");
}
示例結(jié)果:
$ gcc ex068.c -o demo
$ ./demo
4 = 2+2, 5 = 2+3, 6 = 3+3, 7 = 2+5, 8 = 3+5,
9 = 2+7, 10 = 3+7, 10 = 5+5, 12 = 5+7, 13 = 2+11,
14 = 3+11, 14 = 7+7, 15 = 2+13, 16 = 3+13, 16 = 5+11,
18 = 5+13, 18 = 7+11, 19 = 2+17, 20 = 3+17, 20 = 7+13,
21 = 2+19, 22 = 3+19, 22 = 5+17, 22 = 11+11, 24 = 5+19,
24 = 7+17, 24 = 11+13, 25 = 2+23, 26 = 3+23, 26 = 7+19,
26 = 13+13, 28 = 5+23, 28 = 11+17, 30 = 7+23, 30 = 11+19,
30 = 13+17, 31 = 2+29, 32 = 3+29, 32 = 13+19, 33 = 2+31,
34 = 3+31, 34 = 5+29, 34 = 11+23, 34 = 17+17, 36 = 5+31,
36 = 7+29, 36 = 13+23, 36 = 17+19, 38 = 7+31, 38 = 19+19,
39 = 2+37, 40 = 3+37, 40 = 11+29, 40 = 17+23, 42 = 5+37,
42 = 11+31, 42 = 13+29, 42 = 19+23, 43 = 2+41, 44 = 3+41,
44 = 7+37, 44 = 13+31, 45 = 2+43, 46 = 3+43, 46 = 5+41,
46 = 17+29, 46 = 23+23, 48 = 5+43, 48 = 7+41, 48 = 11+37,
48 = 17+31, 48 = 19+29, 49 = 2+47, 50 = 3+47, 50 = 7+43,
50 = 13+37, 50 = 19+31,