寻找素数

一.题目要求

·题目

编写一个程序,找出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;
}
posted @ 2021-05-19 22:16  酸柚子sour  阅读(152)  评论(0)    收藏  举报
Akizuki-Kanna