2301_79724126 2023-10-26 09:02 采纳率: 93.8%
浏览 56
已结题

哥德巴赫猜想,哥德巴赫猜想

img


试题描述
任何大于2的偶数,都可以写成两个素数之和(俗称1+1)。
给定一个偶数,输出它的猜想式子。请使用循环来实现。
例如:2008=5+2003(如果有多个表达式,输出前一个加数最小的表达式)
输入
输入一个偶数口,且2<n <=10000。
输出
输出满足歌德巴赫猜想的第一个加数最小的表达式

img


应该怎么改进

  • 写回答

4条回答 默认 最新

  • 关注

    你的代码有几个问题:
    (1)for循环从i=2开始就可以,到n/2结束
    (2)a= i,而不是a=i++,1不是素数,a=i++的逻辑是a=i; i++
    (3)for循环中应该给x和y重置,而且,不应该用 !=0来作为条件给x和y赋值
    代码修改如下:

    
    #include <stdio.h>
    int main()
    {
        int n, i, a, b, x=0, j, k, y=0;
        scanf("%d",&n);
        for (i = 2; i <= n / 2; i++) //这里从2开始即可,到n/2结束
        {
            a = i;
            b = n - i;
            x = y = 1; //这里重置x和y
            if (b < a) //避免出现a<b的情况,保证a < b
                continue;
            for (j = 2; j < a; j++)
            {
                if (a % j == 0)
                {
                    x = 0;
                    break; //这里结束循环
                }
            }
            for (j = 2; j < b; j++)
            {
                if (b % j == 0)
                {
                    y = 0;
                    break; //这里结束循环
                }
            }
            if (x == 1 && y == 1)
            {
                printf("%d=%d+%d", n, a, b);
                break;//这里结束循环
            }
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月3日
  • 已采纳回答 10月26日
  • 创建了问题 10月26日