利用C语言验证哥德巴赫猜想

本程序利用C语言验证哥德巴赫猜想
( (a) 任何一个>=6之偶数,都可以表示成两个奇质数之和。
(b) 任何一个>=9之奇数,都可以表示成三个奇质数之和。)
代码如下

#include<stdio.h>
#include<math.h>
void spilt_eve(unsigned int array[3]);
void spilt_odd(unsigned int array[4]);
int isprime(int x);
void error_1(int a);
void main()
{
    unsigned int a = 1, c = 1;
    unsigned int eve[3] = { 0 };
    unsigned int odd[4] = { 0 };
    //输入数字
    for (; a != 0;)
    {
        printf("Please input a number.\n(from 0 to 65535)\n");//最好不要输入超过65535的数字,否则会让本程序运行时间过长
        scanf_s("%d", &a);
        if ((a % 2 == 0) && (a < 6))
        {
            printf("Error Begin.\nif the number is even number, please make sure that it is beyond 6.\n");
            error_1(1);
            continue;
        }
        else if ((a % 2 != 0) && (a < 9))
        {
            printf("Error Begin.\nif the number is odd number, please make sure that it's beyond 9.\n");
            error_1(1);
            continue;
        }

        //将数字进行分类,分出奇数和偶数
        if (a % 2 == 0)
        {
            eve[0] = a;
            spilt_eve(eve);

        }

        else
        {
            odd[0] = a;
            spilt_odd(odd);

        }


    }
}

//确保输出的数字是质数
int isprime(int x)
{
    int i, j = 1;
    for (i = 2; i <= (int)sqrt(x); i++)
    {
        if (x % i == 0)
        {
            j = 0;
            break;
        }
    }
    return(j);
}

void error_1(int a)
{
    printf("请选择一个合适的数字");
}

//偶数
void spilt_eve(unsigned int eve[3])
{
    int i, j;
    i = eve[0];
    for (j = 3; j <= i / 2; j++)
    {
        if (isprime(j) == 1)
        {
            if ((isprime(i - j == 1)))
            {
                eve[1] = j;
                eve[2] = i - j;
                printf("%d=%d+%d\n", eve[0], eve[1], eve[2]);
            }
        }
    }
}

//奇数
void spilt_odd(unsigned int odd[4])
{
    int i, j, k;
    i = odd[0];
    for (k = 3; k <= i / 3; k++)
    {
        if (isprime(k) == 1)
        {
            for (j = k; j <= i / 2; j++)
            {
                if (isprime(j) == 1)
                {
                    if (isprime(i - k - j) == 1 && ((i - k - j) >= j))
                    {

                        odd[1] = k;
                        odd[2] = j;
                        odd[3] = i - k - j;
                        printf("%d=%d+%d+%d\n", odd[0], odd[1], odd[2], odd[3]);
                    }
                }
            }
        }
    }
}

warning:::如果你们不怕电脑CPU烧掉,输入10亿以内的数字还是可以的

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值