快乐打码 2023-01-17 08:17 采纳率: 69%
浏览 34
已结题

请问我这样写有什么问题要怎么改才对

任务描述
输入两个大于6的正偶数a和b(a<b),输出二者之间所有数的哥德巴赫猜想的验证过程,每个数的验证过程只输出第一个算式(第1个加数最小)即可。

[科普] 哥德巴赫猜想是数论中存在最久的未解问题之一。这个猜想最早出现在1742年普鲁士人克里斯蒂安•哥德巴赫与瑞士数学家莱昂哈德•欧拉的通信中。用现代的数学语言,哥德巴赫猜想可以表述为:“任何一个充分大的偶数(>6)都可以表示成两个奇素数的和的形式”。

输入样例:
10 16
输出样例:
10=3+7
12=5+7
14=3+11
16=3+13

#include<stdio.h>
#include<math.h>
int f(int a,int b)
{
    for(int i=a;i<=b;i++)
        {
        for(int j=0;j<=sqrt(i);j++){
            if(j%i==0)
                return 0;
        }
        return 1;
        }
}
int main()
{
    int a,b;
   scanf("%d%d",&a,&b);
    for(int j=a;j<=b;j++){
    for(int i=3;i<=j/2;i++)
    {
        if(f(j)==1&&f(j-i)==1&&i!=j-i)
            printf("%d=%d+%d\n",j,i,j-i);
    }
    }
    
}

展开全部

  • 写回答

4条回答 默认 最新

  • 元气少女缘结神 2023-01-17 08:24
    关注

    函数f需要两个参数,你f(j) 只给它传一个参数?而且直接下面这样看着更清爽:

    #include<stdio.h>
    #include<math.h>
    
    
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);
    
        for(int j=a;j<=b;j+=2)
        {
            for(int i=3;i<a;i+=2)
            {
                int sub=j-i;
    
                if(sub %2 !=0)
                {
                    if(sub % i==0)
                        continue;
                    printf("%d=%d+%d\n",j,i,sub);
                    break;
                }
            }
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 1月24日
  • 已采纳回答 1月17日
  • 创建了问题 1月17日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部