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

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

#include
#include
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亿以内的数字还是可以的

你可能感兴趣的:(C语言,c语言,c++)