为什么没有输出啊 代码有什么问题啊
题目是一个正整数如果只有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");
}
} 代码有两个问题:
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;
}
代码中的循环判断条件有问题,不应该使用 == 来判断两个数是否相等,而是应该使用求模运算符 %。另外,在判断素数的逻辑中,如果找到除了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]