C语言把一个大于六的偶数拆成两个素数之和,帮我看看哪错了?输出来的都是奇数之和

#include<stdio.h>#include<math.h>voidmain(){inta,x,y,i,j;do{printf("q请输入一个大于六的偶数:");s... #include<stdio.h>
#include<math.h>
void main()
{
int a,x,y,i,j;
do{
printf("q请输入一个大于六的偶数:");
scanf("%d",&a);
}while(a%2!=0||a<6);
for(x=2;x<a;x++)
{
for(i=2;i<sqrt(x);i++)
if(x%i==0)break;
if(i>=sqrt(x))
{
y=a-x;
for(j=2;j<sqrt(y);j++)
if(y%j==0) break;
if(j>=sqrt(y))
{
printf("%d=%d+%d\n",a,x,y);
}
}
}

}
展开
 我来答
风若远去何人留
2014-10-25 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部

判断素数的临界有问题

修改如下 供参考

#include<stdio.h>
#include<math.h>
void main()
{
 int a,x,y,i,j;
 do{
        printf("q请输入一个大于六的偶数:");
 scanf("%d",&a);
 }while(a%2!=0||a<6);
 for(x=2;x<a;x++)
{
       for(i=2;i<=sqrt(x);i++)
   if(x%i==0)break;
   if(i>sqrt(x))
{
      y=a-x;
      for(j=2;j<=sqrt(y);j++)
       if(y%j==0) break;
       if(j>sqrt(y))
       {
      printf("%d=%d+%d\n",a,x,y);
       }
    }
}

 }
furious_tauren
推荐于2017-09-07 · TA获得超过4056个赞
知道大有可为答主
回答量:1913
采纳率:100%
帮助的人:772万
展开全部

#include<stdio.h>
#include<math.h>
void main()
{
int a,x,y,i,j;
do{
printf("q请输入一个大于六的偶数:");
scanf("%d",&a);
}while(a%2!=0||a<6);

/* 如果运行 14= 7 + 7, x < a/2 改成 x <= a/2*/
for(x=2;x<a/2;x++) /*a -> a/2*/
{
for(i=2;i<=sqrt(x);i++) /*i<sqrt ---> i<=sqrt*/
if(x%i==0)break;
if(i>sqrt(x)) /* >= ---> >*/
{
y=a-x;
for(j=2;j<=sqrt(y);j++)  /*i<sqrt ---> i<=sqrt*/
if(y%j==0) break;
if(j>sqrt(y))  /* >= ---> >*/
{
printf("%d=%d+%d\n",a,x,y);
}
}
}

}

 下面是另一种做法,我推荐下面的方式:

#include <stdio.h>

int is_prime(int n)
{
int i;

for (i = 2; i * i <= n; i++)
if (n % i == 0)
return 0;
return 1;
}

int main(void)
{
int a, i;

do {
printf("q请输入一个大于六的偶数:");
scanf("%d", &a);
} while (a % 2 || a < 6);

for (i = 2; i < a / 2; i++)
if (is_prime(i) && is_prime(a - i))
printf("%d=%d+%d\n", a, i, a - i);
return 0;
}
追问
函数的我们还没学到。第一中方法if(j>sqrt(y))加个&&y>2,,是吧?谢谢啦
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式