1. 程式人生 > >【C語言】哥德巴赫猜想

【C語言】哥德巴赫猜想

問題:計算得到某一區間內所有符合哥德巴赫猜想的數。

背景:哥德巴赫猜想:任一大於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"); }

這裡寫圖片描述