首先得申明一句,自己文学业余出身,数学的确不好,能够说齐全零根底,因而这篇博客的代码花了靠近一下午的工夫(并不是代码有多难,而是本人数学太差,所以得查半天材料钻研)

什么是哥德巴赫猜想

(以下内容来自百度百科)

哥德巴赫1742年在给欧拉的信中提出了以下猜测:任一大于2的整数都可写成三个质数之和 [1] 。然而哥德巴赫本人无奈证实它,于是就写信求教赫赫有名的大数学家欧拉帮忙证实,然而始终到死,欧拉也无奈证实。 [2] 因现今数学界曾经不应用“1也是素数”这个约定,原初猜测的古代陈说为:任一大于5的整数都可写成三个质数之和。(n>5:当n为偶数,n=2+(n-2),n-2也是偶数,能够合成为两个质数的和;当n为奇数,n=3+(n-3),n-3也是偶数,能够合成为两个质数的和)欧拉在回信中也提出另一等价版本,即任一大于2的偶数都可写成两个质数之和。今日常见的猜测陈说为欧拉的版本。把命题"任一充沛大的偶数都能够示意成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。1966年陈景润证实了"1+2"成立,即"任一充沛大的偶数都能够示意成二个素数的和,或是一个素数和一个半素数的和"。

今日常见的猜测陈说为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“对于偶数的哥德巴赫猜想”。
从对于偶数的哥德巴赫猜想,可推出:任何一个大于7的奇数都能被示意成三个奇质数的和。后者称为“弱哥德巴赫猜想”或“对于奇数的哥德巴赫猜想”。若对于偶数的哥德巴赫猜想是对的,则对于奇数的哥德巴赫猜想也会是对的。2013年5月,巴黎低等师范学院研究员哈洛德·贺欧夫各特发表了两篇论文,发表彻底证实了该猜测。

**说了这么多,咱们总结一句话,那就是:
咱们要在2000以内的不小于4的正偶数都可能合成为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)**

思路
既然晓得题目要求,咱们接下来就要设计算法了
首先,咱们本人定义一个函数,咱们假如函数名字叫fun,将素数过滤出来

int fun(int n){    int i;    if(n==2)        return 1;  /*n是2,返回1*/    if(n%2==0)        return 0;  /*n是偶数,不是素数,返回0*/    for(i=3; i<=sqrt(n); i+=2)        if(n%i==0)            return 0;  /*n是奇数,不是素数,返回0*/    return 1;  /*n是除2以外的素数返回1*/}

有了素数的判断,接下来,咱们就能够设计主函数了。
因为是用户输出,所以为了避免“淘气的用户乱输出”导致报错,所以咱们思考下空值的状况,以及非偶数的状况,另外,通过退出ok来管制输入。
残缺代码如下;

#include<math.h>#include<stdio.h>int fun(int n){    int i;    if(n==2)        return 1;  /*n是2,返回1*/    if(n%2==0)        return 0;  /*n是偶数,不是素数,返回0*/    for(i=3; i<=sqrt(n); i+=2)        if(n%i==0)            return 0;  /*n是奇数,不是素数,返回0*/    return 1;  /*n是除2以外的素数返回1*/}int main(){    int n, i, ok;    while(scanf("%d",&n)!=EOF)    {        ok=0;  /*进入循环前先置标记位*/        for(i=2; i<=n/2; i++)        {            if( fun(i) )                if( fun(n-i) )                {                    printf("%d %d\n", i, n-i);  /*i和n-i都是素数,则打印*/                    ok=1;                }            if(i!=2)                i++;            if(ok)                break;  /*已打印出所须要的输入后果,跳出循环*/        }    }    return 0;