题解 | #筛选法求素数#
筛选法求素数
https://www.nowcoder.com/practice/06c3dcc303654ef4926654023eca1e5a
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned short len = 0;
unsigned short *parray = NULL;
unsigned short count = 0; // 统计0的个数
// 多组输入
while (EOF != scanf("%hu", &len)) {
if (len < 2)
return -1;
// 动态申请内存
parray = (unsigned short *)calloc(len - 1, sizeof(unsigned short));
if (NULL == parray)
return -1;
// 将2~n之间的正整数放在数组内存储
for (unsigned short i = 0; i < len - 1; i++) {
parray[i] = i + 2; // 下标为0的时候写的存储的是2,然后依次递增1
}
// 将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止
for (int i = 1; i < len - 1; i++) { // 不包含2
for (int j = i; j < len - 1; j++) {
// 判断是不是素数
if (0 == parray[j] % (i + 1))
parray[j] = 0;
}
}
// 输出素数
for (int i = 0; i < len - 1; i++) {
// 数组中不为0 的数即为素数
if (0 != parray[i])
printf("%hu ", parray[i]);
else // 统计数组中2之后被清0 的个数
count++;
}
// 换行+输出输出数组中2之后被清0 的个数
printf("\n%hu\n", count);
// 释放内存
free(parray);
parray = NULL;
}
return 0;
}
海康威视公司福利 1330人发布
查看5道真题和解析