新人求解为何输出如此奇怪?

验证哥德巴赫猜想,输入任一大于二的偶数,输出两素数。

 #include <stdio.h>
int main()
{
    int m,a,b=0,c=0,d,e,n,i,j;
    scanf("%d",&m);
    for(i=3;i<m;i=i+2)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                b=1;
                break;/*判断i是否为素数*/
            }
        }
            e=i;
            d=n-e;
        for(j=2;j<m/2;j++)
        {
            if(d%j==0)
            {
                c=1;
                break;/*判断d是否为素数*/
            }
        }
        if(b==0&&c==0&&e!=d)
        {
            if(d>m/2)
            {
                printf("%d %d\n",e,d);/*输出数据从小到大排序,多种情况换行*/
            }
        }
        b=0;c=0;
    }
    return 0;
}

c

3个回答

以下是改好的程序,结合了上面两位大神的回答

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

为什么i从3开始循环。很明显,输入4你就得不到结果
还有下面的循环目测不是m/2而是d/2
还有是d=m-e,n你没用到。


给你修改了下,你参考下

#include <stdio.h>
int main()
{
    int m,a,b=0,c=0,d,e,i,j;
    scanf("%d",&m);
    for(i=2;i<m;i++)
    {
        for(j=2;j<i;j++)
        {
            if(i%j==0)
            {
                b=1;
                break;/*判断i是否为素数*/
            }
        }
        if (i == 2) b=0;
        e=i;
        d=m-e;
        for(j=2;j<d/2;j++)
        {
            if(d%j==0)
            {
                c=1;
                break;/*判断d是否为素数*/
            }
        }
        if (d < 2) c=1;
        if(b==0&&c==0&&e!=d)
        {
            if(d>m/2)
            {
                printf("%d %d\n",e,d);/*输出数据从小到大排序,多种情况换行*/
            }
        }
        b=0;c=0;
    }
    return 0;
}
Nocrossnocrown
Nocrossnocrown 能输出两素数,两素数不能相同,所以这个程序有符合要求的输出能输入的偶数最小是8,我上面那个评论错了
大约一年之前 回复
Nocrossnocrown
Nocrossnocrown 程序已经改好了,还是要谢谢大神
大约一年之前 回复
Nocrossnocrown
Nocrossnocrown 大神的程序输入6,输出2 4
大约一年之前 回复
Nocrossnocrown
Nocrossnocrown 1不是素数,所以能输入的最小偶数是6
大约一年之前 回复
  1. d=n-e;要改为d=m-e; 2.for(j=2;j<m/2;j++)循环里面j<d/2;虽然j<m/2也可以得到正确结果,但是明显走了更多的无用的循环. 3.要判断素数为2的情况.
Nocrossnocrown
Nocrossnocrown 前面的都改过来了,输出对了,谢谢大神
大约一年之前 回复
Nocrossnocrown
Nocrossnocrown 不用判断素数2,输入偶数,输出两素数,有一个是二另一个还能是素数么
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问