要求判断素数,然后再验证大于7的奇数可以等于三个素数之和
但是我的代码输入15后输出的三个运行结果有一个是不对的
#include<stdio.h>
int IsPrime(int n)
{
int j;
for(j=2;j<=n;j++)
{
if( (j<n) && (n%j==0) )
{
return 0;
}
if(j==n)
{
return 1;
}
}
}
int main()
{
int x,i,j;
scanf("%d",&x);
int l;
int a,b,c;
int n=1+x/3;
if(x%2!=0)
{
for(i=2;i<=n;i++)
{
l=x;
if(IsPrime(i)==1)
{
a=i;
l=l-i;
for(j=i;j<l;j++)
{
if(IsPrime(j)==1)
{
b=j;
l=l-j;
if(IsPrime(l)==1)
{
c=l;
printf("%d+%d+%d=%d\n",a,b,c,x);
}
}
}
}
}
}
return 0;
}
素数判断函数有问题,1 不是素数 , 另主函数中,变量 l 设置有问题,修改见注释处,供参考:
#include<stdio.h>
int IsPrime(int n)
{
int j;
if (n <= 1) return 0; //修改
for (j = 2; j <= n; j++)
{
if ((j < n) && (n % j == 0))
{
return 0;
}
if (j == n)
{
return 1;
}
}
}
int main()
{
int x, i, j;
scanf("%d", &x);
int l, t; //修改,增加一个中间变量 t
int a, b, c;
int n = 1 + x / 3;
if (x % 2 != 0)
{
for (i = 2; i <= n; i++)
{
l = x;
if (IsPrime(i) == 1)
{
a = i;
l = l - i;
for (j = i; j < l; j++)
{
if (IsPrime(j) == 1)
{
b = j;
t = l - j; //l = l - j; 修改
if (IsPrime(t) == 1) // IsPrime(l)==1 修改
{
c = t; // c=l; 修改
printf("%d+%d+%d=%d\n", a, b, c, x);
}
}
}
}
}
}
return 0;
}
第二个for循环有问题