初莫M 发表于 2023-10-10 19:18:49

为什么没有输出啊 代码有什么问题啊

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

输入描述
m
n
输出描述
m
和n
之间的素数,每行5个,且每个输出数字后面有一个空格。
#include<stdio.h>
int su(int x)
{
    int i=x,sum=0;
    for(int a=2;a<i;a++)
    {
      if(i/a==0){sum=i;continue;}
      else sum=0;
    }
    return sum;
}
int main()
{
    int m,n,t,s=0;
    scanf("%d %d",&m,&n);
    if(m>n){t=n;n=m;m=t;}
    for(int i=m;i<=n;i++)
    {
      if(su(i)!=0) printf("%d ",i);
      s++;
      if(s!=0&&s/5==0) printf("\n");
    }
}

isdkz 发表于 2023-10-10 19:19:19

代码有两个问题:

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

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

修改后的代码如下:

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

int is_prime(int x) {
    if (x < 2) {
      return 0;
    }
    int i;
    for (i = 2; i <= sqrt(x); i++) {
      if (x % i == 0) {
            return 0;
      }
    }
    return 1;
}

int main() {
    int m, n, count = 0;
    scanf("%d %d", &m, &n);
    if (m > n) {
      int temp = m;
      m = n;
      n = temp;
    }
    int i;
    for (i = m; i <= n; i++) {
      if (is_prime(i)) {
            printf("%d ", i);
            count++;
            if (count % 5 == 0) {
                printf("\n");
            }
      }
    }
    if (count % 5 != 0) {
      printf("\n");
    }
    return 0;
}

Mike_python小 发表于 2023-10-10 19:19:53

代码中的循环判断条件有问题,不应该使用 == 来判断两个数是否相等,而是应该使用求模运算符 %。另外,在判断素数的逻辑中,如果找到除了1和自身以外的因子,就应该立即退出循环并返回0,而不是继续执行循环。下面是修改后的代码:


#include <stdio.h>

int su(int x) {
    if (x <= 1) {// 小于等于1的数不是素数
      return 0;
    }
    for (int a = 2; a * a <= x; a++) {
      if (x % a == 0) {
            return 0;// 找到非1和自身的因子,不是素数
      }
    }
    return 1;// 是素数
}

int main() {
    int m, n, t, s = 0;
    scanf("%d %d", &m, &n);
    if (m > n) {
      t = n;
      n = m;
      m = t;
    }
    for (int i = m; i <= n; i++) {
      if (su(i)) {
            printf("%d ", i);
            s++;
            if (s != 0 && s % 5 == 0) {
                printf("\n");
            }
      }
    }

    return 0;
}


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

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 为什么没有输出啊 代码有什么问题啊