|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目是
一个正整数如果只有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;
- }
复制代码
|
|