【C語言】哥德巴赫猜想
阿新 • • 發佈:2019-02-08
問題:計算得到某一區間內所有符合哥德巴赫猜想的數。
背景:哥德巴赫猜想:任一大於2的偶數都可寫成兩個素數之和。
思路:
1.得到這個區間內的所有素數,放入一陣列。
2.計算這些素數之間的和。
3.得解。
程式:
#include "stdafx.h"
#include <stdlib.h>
#include <math.h>
//判斷是否為素數
bool isPrime(int number)
{
for (int i = 2; i <= sqrt(number); i++) {
if (number % i == 0 )
return false;
}
return true;
}
void main()
{
int n = 0;
scanf_s("%d", &n);
//根據區間大小,建立一個數組存放這個區間內的所有素數
int *primeArray = (int*)malloc((n)*sizeof(int*));
//計算這個區間內的所有素數,是素數的元素即為素數的值,否則為0
for (int i = 2; i <= n; i = i++) {
if (isPrime(i)) {
primeArray[i - 2 ] = i;
//printf("%d ", i);
}else
primeArray[i - 2] = 0;
}
//哥德巴赫猜想
for (int i = 0; i <= n; i = i + 2) {//第一層:區間
//氣泡排序原理相加:防止不會出現8 = 3 + 5,8 = 5 + 3 這種重複計算的情況
for (int j = 0; j < n; j++) {//第二層:被加數
if(primeArray[j] != 0)
for (int k = j; k < n; k++) {//第三層:加數
if (primeArray[k] != 0)
if ((primeArray[j] + primeArray[k]) == i) {
printf("%d=%d+%d\n", i, primeArray[j], primeArray[k]);
break;
}
}
}
printf("\n");
}
system("pause");
}