您的位置:首页 > 编程语言 > C语言/C++

【C语言】哥德巴赫猜想

2016-05-11 21:04 411 查看
问题:计算得到某一区间内所有符合哥德巴赫猜想的数。

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

4000
printf("\n");
}

system("pause");
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: