鱼C论坛

 找回密码
 立即注册
查看: 2132|回复: 2

[已解决]为什么没有输出啊 代码有什么问题啊

[复制链接]
发表于 2023-10-10 19:18:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目是
一个正整数如果只有1和它本身两个因子,称为为素数。现在请你输出正整数m
和n
之间的素数(包含m
和n
),如果没有,输出no

输入描述
m
n
输出描述
m
和n
之间的素数,每行5个,且每个输出数字后面有一个空格。
  1. #include<stdio.h>
  2. int su(int x)
  3. {
  4.     int i=x,sum=0;
  5.     for(int a=2;a<i;a++)
  6.     {
  7.         if(i/a==0){sum=i;continue;}
  8.         else sum=0;
  9.     }
  10.     return sum;
  11. }
  12. int main()
  13. {
  14.     int m,n,t,s=0;
  15.     scanf("%d %d",&m,&n);
  16.     if(m>n){t=n;n=m;m=t;}
  17.     for(int i=m;i<=n;i++)
  18.     {
  19.         if(su(i)!=0) printf("%d ",i);
  20.         s++;
  21.         if(s!=0&&s/5==0) printf("\n");
  22.     }
  23. }
复制代码
最佳答案
2023-10-10 19:19:19
代码有两个问题:

1. 在判断一个数是否为素数时,应该判断该数能否被2到该数的平方根之间的任意一个数整除,而不是判断该数除以2到该数之间的任意一个数是否为0。

2. 在输出素数时,判断是否需要换行的条件应该是s%5==0,而不是s/5==0。

修改后的代码如下:

  1. #include <stdio.h>
  2. #include <math.h>

  3. int is_prime(int x) {
  4.     if (x < 2) {
  5.         return 0;
  6.     }
  7.     int i;
  8.     for (i = 2; i <= sqrt(x); i++) {
  9.         if (x % i == 0) {
  10.             return 0;
  11.         }
  12.     }
  13.     return 1;
  14. }

  15. int main() {
  16.     int m, n, count = 0;
  17.     scanf("%d %d", &m, &n);
  18.     if (m > n) {
  19.         int temp = m;
  20.         m = n;
  21.         n = temp;
  22.     }
  23.     int i;
  24.     for (i = m; i <= n; i++) {
  25.         if (is_prime(i)) {
  26.             printf("%d ", i);
  27.             count++;
  28.             if (count % 5 == 0) {
  29.                 printf("\n");
  30.             }
  31.         }
  32.     }
  33.     if (count % 5 != 0) {
  34.         printf("\n");
  35.     }
  36.     return 0;
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-10 19:19:19 | 显示全部楼层    本楼为最佳答案   
代码有两个问题:

1. 在判断一个数是否为素数时,应该判断该数能否被2到该数的平方根之间的任意一个数整除,而不是判断该数除以2到该数之间的任意一个数是否为0。

2. 在输出素数时,判断是否需要换行的条件应该是s%5==0,而不是s/5==0。

修改后的代码如下:

  1. #include <stdio.h>
  2. #include <math.h>

  3. int is_prime(int x) {
  4.     if (x < 2) {
  5.         return 0;
  6.     }
  7.     int i;
  8.     for (i = 2; i <= sqrt(x); i++) {
  9.         if (x % i == 0) {
  10.             return 0;
  11.         }
  12.     }
  13.     return 1;
  14. }

  15. int main() {
  16.     int m, n, count = 0;
  17.     scanf("%d %d", &m, &n);
  18.     if (m > n) {
  19.         int temp = m;
  20.         m = n;
  21.         n = temp;
  22.     }
  23.     int i;
  24.     for (i = m; i <= n; i++) {
  25.         if (is_prime(i)) {
  26.             printf("%d ", i);
  27.             count++;
  28.             if (count % 5 == 0) {
  29.                 printf("\n");
  30.             }
  31.         }
  32.     }
  33.     if (count % 5 != 0) {
  34.         printf("\n");
  35.     }
  36.     return 0;
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-10 19:19:53 | 显示全部楼层
代码中的循环判断条件有问题,不应该使用 == 来判断两个数是否相等,而是应该使用求模运算符 %。另外,在判断素数的逻辑中,如果找到除了1和自身以外的因子,就应该立即退出循环并返回0,而不是继续执行循环。下面是修改后的代码:
  1. #include <stdio.h>
  2. int su(int x) {
  3.     if (x <= 1) {  // 小于等于1的数不是素数
  4.         return 0;
  5.     }
  6.     for (int a = 2; a * a <= x; a++) {
  7.         if (x % a == 0) {
  8.             return 0;  // 找到非1和自身的因子,不是素数
  9.         }
  10.     }
  11.     return 1;  // 是素数
  12. }
  13. int main() {
  14.     int m, n, t, s = 0;
  15.     scanf("%d %d", &m, &n);
  16.     if (m > n) {
  17.         t = n;
  18.         n = m;
  19.         m = t;
  20.     }
  21.     for (int i = m; i <= n; i++) {
  22.         if (su(i)) {
  23.             printf("%d ", i);
  24.             s++;
  25.             if (s != 0 && s % 5 == 0) {
  26.                 printf("\n");
  27.             }
  28.         }
  29.     }
  30.     return 0;
  31. }
复制代码

主要修改内容如下:
1. 修改 su() 函数的判断逻辑,修复判断素数的错误。
2. 在循环中使用 % 求模运算符来判断是否需要换行。

这样,代码将能正确输出 m 和 n 之间的素数,每行5个数字。希望对你有所帮助!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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