
试题描述
任何大于2的偶数,都可以写成两个素数之和(俗称1+1)。
给定一个偶数,输出它的猜想式子。请使用循环来实现。
例如:2008=5+2003(如果有多个表达式,输出前一个加数最小的表达式)
输入
输入一个偶数口,且2<n <=10000。
输出
输出满足歌德巴赫猜想的第一个加数最小的表达式

应该怎么改进


你的代码有几个问题:
(1)for循环从i=2开始就可以,到n/2结束
(2)a= i,而不是a=i++,1不是素数,a=i++的逻辑是a=i; i++
(3)for循环中应该给x和y重置,而且,不应该用 !=0来作为条件给x和y赋值
代码修改如下:
#include <stdio.h>
int main()
{
int n, i, a, b, x=0, j, k, y=0;
scanf("%d",&n);
for (i = 2; i <= n / 2; i++) //这里从2开始即可,到n/2结束
{
a = i;
b = n - i;
x = y = 1; //这里重置x和y
if (b < a) //避免出现a<b的情况,保证a < b
continue;
for (j = 2; j < a; j++)
{
if (a % j == 0)
{
x = 0;
break; //这里结束循环
}
}
for (j = 2; j < b; j++)
{
if (b % j == 0)
{
y = 0;
break; //这里结束循环
}
}
if (x == 1 && y == 1)
{
printf("%d=%d+%d", n, a, b);
break;//这里结束循环
}
}
return 0;
}