鱼C论坛

 找回密码
 立即注册
查看: 1253|回复: 4

[已解决]验证:偶数=素数+素数

[复制链接]
发表于 2020-8-10 12:48:02 | 显示全部楼层 |阅读模式
15鱼币
程序是验证每个偶数能表示为两个素数的和,偶数不用太大
但是只有4,2时才能输出,其他都不能,这个程序哪里错了呢?

  1. #include <stdio.h>
  2. #include <math.h>
  3. int length;
  4. int su(int n);
  5. int main(void)
  6. {
  7.                 int array[100] = {0};
  8.                 int i, j;
  9.                 int num;
  10.                 printf("请输入一个偶数:");
  11.                 scanf("%d",&num);
  12.                
  13.                 for(i = 2; i <= 100; i++)
  14.                 {
  15.                         if(su(i))
  16.                         {
  17.                                 array[length++] = i; // 将素数存到数组里
  18.                         }
  19.                 }
  20.                
  21.                 if(num == 2)
  22.                 {
  23.                         printf("2 = 1 + 1\n");
  24.                 }
  25.                
  26.                 for(i = 0; i < length; i++)
  27.                 {
  28.                         for(j = 0; j < length; j++)
  29.                         {
  30.                                 if(num == array[i] + array[j])
  31.                                 {
  32.                                         printf("%d = %d + %d\n",num, array[j], array[i]);
  33.                                 }
  34.                                 if(num > array[i] + array[j])
  35.                                 {
  36.                                         break; // num大时执行下轮循环
  37.                                 }
  38.                         }
  39.                 }
  40.                
  41.                 system("pause");
  42.                 return 0;
  43. }

  44. int su(int n)
  45. {
  46.                 int j;
  47.                 for(j = 2; j < n; j++)
  48.                 {
  49.                         if(n % j == 0)
  50.                         {
  51.                                 return 0;
  52.                         }
  53.                 }
  54.                 return 1;
  55. }
复制代码
最佳答案
2020-8-10 12:48:03
本帖最后由 sunrise085 于 2020-8-10 13:23 编辑

帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值

  1. #include <stdio.h>
  2. #include <math.h>
  3. int length;
  4. int su(int n);
  5. int main(void)
  6. {
  7.     int array[100] = {0};
  8.     int i, j;
  9.     int num;
  10.     length=0;
  11.     printf("请输入一个偶数:");
  12.     scanf("%d",&num);
  13.    
  14.     for(i = 2; i <= 100; i++)
  15.     {
  16.         if(su(i))
  17.         {
  18.             array[length++] = i; // 将素数存到数组里
  19.         }
  20.     }

  21.     if(num == 2)
  22.     {
  23.         printf("2 = 1 + 1\n");
  24.     }
  25.    
  26.     for(i = 0; i < length; i++)
  27.     {
  28.         for(j = 0; j < length; j++)
  29.         {
  30.             if(num == array[i] + array[j])
  31.             {
  32.                 printf("%d = %d + %d\n",num, array[j], array[i]);
  33.             }
  34.             if(num < array[i] + array[j])//这里是不对的。应该是两个数之和超过num的时候执行下一次循环
  35.             {
  36.                 break; // num大时执行下轮循环
  37.             }
  38.         }
  39.     }
  40.    
  41.     system("pause");
  42.     return 0;
  43. }

  44. int su(int n)
  45. {
  46.     int j;
  47.     for(j = 2; j < n; j++)
  48.     {
  49.         if(n % j == 0)
  50.         {
  51.             return 0;
  52.         }
  53.     }
  54.     return 1;
  55. }
复制代码

最佳答案

查看完整内容

帮你修改了 第36行,应该是两个数之和超过num的时候执行下一次循环 另外你的length没有赋初值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 12:48:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-8-10 13:23 编辑

帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值

  1. #include <stdio.h>
  2. #include <math.h>
  3. int length;
  4. int su(int n);
  5. int main(void)
  6. {
  7.     int array[100] = {0};
  8.     int i, j;
  9.     int num;
  10.     length=0;
  11.     printf("请输入一个偶数:");
  12.     scanf("%d",&num);
  13.    
  14.     for(i = 2; i <= 100; i++)
  15.     {
  16.         if(su(i))
  17.         {
  18.             array[length++] = i; // 将素数存到数组里
  19.         }
  20.     }

  21.     if(num == 2)
  22.     {
  23.         printf("2 = 1 + 1\n");
  24.     }
  25.    
  26.     for(i = 0; i < length; i++)
  27.     {
  28.         for(j = 0; j < length; j++)
  29.         {
  30.             if(num == array[i] + array[j])
  31.             {
  32.                 printf("%d = %d + %d\n",num, array[j], array[i]);
  33.             }
  34.             if(num < array[i] + array[j])//这里是不对的。应该是两个数之和超过num的时候执行下一次循环
  35.             {
  36.                 break; // num大时执行下轮循环
  37.             }
  38.         }
  39.     }
  40.    
  41.     system("pause");
  42.     return 0;
  43. }

  44. int su(int n)
  45. {
  46.     int j;
  47.     for(j = 2; j < n; j++)
  48.     {
  49.         if(n % j == 0)
  50.         {
  51.             return 0;
  52.         }
  53.     }
  54.     return 1;
  55. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-10 13:55:03 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-8-10 14:11 编辑

偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6
对吗?
偶数  = 2
1和0既非素数也非合数 #百度百科写的
2 是偶数

没有理解题意!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-10 17:58:26 | 显示全部楼层
sunrise085 发表于 2020-8-10 12:48
帮你修改了
第36行,应该是两个数之和超过num的时候执行下一次循环
另外你的length没有赋初值

对对,迷了
length是全局变量啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-10 17:59:57 | 显示全部楼层
Cool_Breeze 发表于 2020-8-10 13:55
偶数 = 16
成立 16 = 5 + 11
不成立 16 = 10 + 6

对的,所以我判定了一下输入的偶数是不是2,这个题感觉也是有毛病
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-3 12:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表