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);
}
}
}
} 展开
#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);
}
}
}
} 展开
2个回答
展开全部
判断素数的临界有问题
修改如下 供参考
#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);
}
}
}
}
展开全部
#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,,是吧?谢谢啦
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询