【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");
}

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值