验证:偶数=素数+素数
程序是验证每个偶数能表示为两个素数的和,偶数不用太大但是只有4,2时才能输出,其他都不能,这个程序哪里错了呢?
#include <stdio.h>
#include <math.h>
int length;
int su(int n);
int main(void)
{
int array = {0};
int i, j;
int num;
printf("请输入一个偶数:");
scanf("%d",&num);
for(i = 2; i <= 100; i++)
{
if(su(i))
{
array = i; // 将素数存到数组里
}
}
if(num == 2)
{
printf("2 = 1 + 1\n");
}
for(i = 0; i < length; i++)
{
for(j = 0; j < length; j++)
{
if(num == array + array)
{
printf("%d = %d + %d\n",num, array, array);
}
if(num > array + array)
{
break; // num大时执行下轮循环
}
}
}
system("pause");
return 0;
}
int su(int n)
{
int j;
for(j = 2; j < n; j++)
{
if(n % j == 0)
{
return 0;
}
}
return 1;
} 本帖最后由 sunrise085 于 2020-8-10 13:23 编辑
帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值
#include <stdio.h>
#include <math.h>
int length;
int su(int n);
int main(void)
{
int array = {0};
int i, j;
int num;
length=0;
printf("请输入一个偶数:");
scanf("%d",&num);
for(i = 2; i <= 100; i++)
{
if(su(i))
{
array = i; // 将素数存到数组里
}
}
if(num == 2)
{
printf("2 = 1 + 1\n");
}
for(i = 0; i < length; i++)
{
for(j = 0; j < length; j++)
{
if(num == array + array)
{
printf("%d = %d + %d\n",num, array, array);
}
if(num < array + array)//这里是不对的。应该是两个数之和超过num的时候执行下一次循环
{
break; // num大时执行下轮循环
}
}
}
system("pause");
return 0;
}
int su(int n)
{
int j;
for(j = 2; j < n; j++)
{
if(n % j == 0)
{
return 0;
}
}
return 1;
} 本帖最后由 Cool_Breeze 于 2020-8-10 14:11 编辑
偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6
对吗?
偶数= 2
1和0既非素数也非合数 #百度百科写的
2 是偶数
没有理解题意! sunrise085 发表于 2020-8-10 12:48
帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值
对对,迷了{:10_277:}。
length是全局变量啊 Cool_Breeze 发表于 2020-8-10 13:55
偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6
对的,所以我判定了一下输入的偶数是不是2,这个题感觉也是有毛病
页:
[1]