关于c:哥德巴赫猜想的验证

48次阅读

共计 1517 个字符,预计需要花费 4 分钟才能阅读完成。

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

什么是哥德巴赫猜想

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

哥德巴赫 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;

正文完
 0