寻找素数
一.题目要求
·题目
编写一个程序,找出1~N中的所有素数,其中1<N,N为整数。
·要求
1.要求每个数后面都要输出逗号,请不要输出其他字符
2.遇到异常情况,输出error
·测试
输入:5
输出:2,3,5,
输入:a
输出:error
二.代码实现
因为之前做过判断质数的题,所以这里直接复制源码,将其定义为一个函数调用。
#include <stdio.h>
#include <math.h>
void prime(int n, int i, int k);
int main() {
int N;
scanf_s("%d", &N);
int j;
int i = 2;
int k;
if (N < 2) printf("error");
else {
for (j = 2; j <= N; j++) {
k = (int)sqrt((double)j);
prime(j, i, k);
}
}
return 0;
}
void prime(int j, int i, int k) {
if (j == 2) printf("%d,", 2);
else if (j == 3) printf("%d,", 3);
else {
for (i = 2; i <= k; i++)
if (j % i == 0)
break;
if (i > k)
printf("%d,", j);
}
return;
}
emmm...不知道为什么,这个拿不了满分。VS2019上面运行确实没问题,而码图上面却在输入a的时候报错。
三.代码改进
#include<stdio.h>
#include<math.h>
int main(){
int N, r, i, j;
int isprim[1000] = { 0 };
r = scanf_s("%d", &N);
if (r == 1 && N > 1){
for (i = 2; i <= sqrt((double)N); i++){
if (isprim[i] == 0){
for (j = 2 * i; j <= N; j += i){
isprim[j] = 1;
}
}
}
}
else{
printf("error");
}
for (i = 2; i <= N; i++){
if (isprim[i] == 0)
printf("%d,", i);
}
return 0;
}
对比上面的代码,可算找出问题了:
还要把scanf_s的返回值赋给一个变量。
因此代码修改如下:
#include <stdio.h>
#include <math.h>
void prime(int n, int i, int k);
int main() {
int N;
int m;
int j;
int i = 2;
int k;
m= scanf_s("%d", &N);
if (m < 1||N<2) printf("error");
else {
for (j = 2; j <= N; j++) {
k = (int)sqrt((double)j);
prime(j, i, k);
}
}
return 0;
}
void prime(int j, int i, int k) {
if (j == 2) printf("%d,", 2);
else if (j == 3) printf("%d,", 3);
else {
for (i = 2; i <= k; i++)
if (j % i == 0)
break;
if (i > k)
printf("%d,", j);
}
return;
}

浙公网安备 33010602011771号