冻鸦2345 2021-10-30 13:12 采纳率: 82.6%
浏览 64
已结题

c语言洛谷P1304 哥德巴赫猜想 ,看下哪里错了

帮忙看下我这程序哪里错了

题目描述
输入一个偶数 N(N<=10000)N(N<=10000),验证4~N所有偶数是否符合哥德巴赫猜想:任一大于 2 的偶数都可写成两个质数之和。如果一个数不止一种分法,则输出第一个加数相比其他分法最小的方案。例如 10,10=3+7=5+5,则 10=5+5 是错误答案。

输入格式
第一行N

输出格式
4=2+2 6=3+3 …… N=x+y

输入输出样例
输入 #1复制
10
输出 #1复制
4=2+2
6=3+3
8=3+5
10=3+7


#include<stdio.h>
#include<math.h>
int z(int i){
    for(int o=2;o<=floor(sqrt(i+0.5));o++){
        i%o==0;
        return 0;
    } 
    return 1;
}
int main(){
    int m;
    scanf("%d",&m);
    for(int i=2;i<=m;i++){
        if(z(i)==1&&z(m-i)==1&&i<(m-i))
        printf("m=%d+%d\n",i,m-i);
        
    }
    return 0;
    
}
  • 写回答

1条回答 默认 最新

  • 关注

    1.判断是否是质数的时候,应该是if(o%i==0) return 0;
    2.你只执行了一次,题目要求输出2-N的所有偶数。

    代码已修改,运行结果如下,如有帮助,请帮忙采纳一下,谢谢。

    img

    代码修改如下:

    
    #include<stdio.h>
    
    #include<stdio.h>
    #include<math.h>
    int z(int i){
        for(int o=2;o<=floor(sqrt(i+0.5));o++){
            if(i%o==0)  //修改1:这里加if
            return 0;
        } 
        return 1;
    }
    int main()
    {
        int m,j;
        scanf("%d",&m);
        for(int i=2;i<=m;i+=2)
        {
            for(j=2;j<i;j++)
            {
                if(z(j)==1&&z(i-j)==1&&j<=(i-j))
                {
                    printf("%d=%d+%d\n",i,j,i-j);  //注意这里
                    break;
                }
            }
            
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大