所谓哥德巴赫猜想是指,任一大于2的偶数都可以写成两个质数之和

题目描述
例如6=3+3,8=3+5,18=7+11。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于2的偶数都能写成两个质数之和。(可能有多种情况,请输出两数差最大的那组)

输入要求
输入一个大于2的偶数N。

输出
输出两个质数和的形式,小的质数在前,大的质数在后。

穷举遍历就行了

代码如下,如有帮助,请帮忙采纳一下,谢谢。

#include <stdio.h>
#include <stdlib.h>
int isprime(int n)
{
    int i=2;
    if(n<2) return 0;
    for(i=2;i<n;i++)
    {
        if(n%i == 0) return 0;
    }
    return 1;
}

int main()
{
    int N;
    int i,j;
    int *p,cnt = 0;
    int flag = 0;
    scanf("%d",&N);
    p = (int*)malloc(sizeof(int)*N);
    for(i=2;i<N;i++)
    {
        if(isprime(i))
            p[cnt++] = i;
    }
    for (i=0;i<cnt-1;i++)
    {
        for(j=i+1;j<cnt;j++)
        {
            if(p[i]+p[j] == N)
            {
                flag = 1;
                printf("%d+%d=%d\n",p[i],p[j],N);
            }
        }
    }
    if(flag == 0)
        printf("没有找到答案");
    free(p);
    p = 0;
    return 0;
}

供参考:

#include <stdio.h>
int  isPrime(int n)
{
    int i;
    if (n <= 3)  return n > 1;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}
int main()
{
    int i, n;
    while (scanf("%d", &n) == 1 && n > 0) // 输入 <= 0 时,结束输入
    {
        for (i = 2; i <= n / 2; i++) {
            if (isPrime(i) && isPrime(n - i)) 
            {
                printf("%-d=%-d+%-d\n", n, i, n - i);//输出
                break;
            }
        }
    }
    return 0;
}