|
15鱼币
程序是验证每个偶数能表示为两个素数的和,偶数不用太大
但是只有4,2时才能输出,其他都不能,这个程序哪里错了呢?
- #include <stdio.h>
- #include <math.h>
- int length;
- int su(int n);
- int main(void)
- {
- int array[100] = {0};
- int i, j;
- int num;
- printf("请输入一个偶数:");
- scanf("%d",&num);
-
- for(i = 2; i <= 100; i++)
- {
- if(su(i))
- {
- array[length++] = i; // 将素数存到数组里
- }
- }
-
- if(num == 2)
- {
- printf("2 = 1 + 1\n");
- }
-
- for(i = 0; i < length; i++)
- {
- for(j = 0; j < length; j++)
- {
- if(num == array[i] + array[j])
- {
- printf("%d = %d + %d\n",num, array[j], array[i]);
- }
- if(num > array[i] + array[j])
- {
- 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[100] = {0};
- int i, j;
- int num;
- length=0;
- printf("请输入一个偶数:");
- scanf("%d",&num);
-
- for(i = 2; i <= 100; i++)
- {
- if(su(i))
- {
- array[length++] = i; // 将素数存到数组里
- }
- }
- if(num == 2)
- {
- printf("2 = 1 + 1\n");
- }
-
- for(i = 0; i < length; i++)
- {
- for(j = 0; j < length; j++)
- {
- if(num == array[i] + array[j])
- {
- printf("%d = %d + %d\n",num, array[j], array[i]);
- }
- if(num < array[i] + array[j])//这里是不对的。应该是两个数之和超过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;
- }
复制代码
|
最佳答案
查看完整内容
帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值
|