题解 | 筛选法求素数
筛选法求素数
https://www.nowcoder.com/practice/06c3dcc303654ef4926654023eca1e5a
#include <stdio.h>
#define N 101
int main()
{
int n;
scanf("%d",&n);
int arr[N] = {0};
int i;
//int index = 0;
//将2~n之间的整数放在数组内存储
int count = 0;
arr[0] = arr[1] = 0; // 标记0和1为非素数(可以不写)
for(i = 2; i <= n; i++)
{
arr[i] = i;//赋值
}
//素数的所有倍数都是合数,直接标记为 0(对应题干要求)
for(i = 2; i <= n; i++)
{
if(arr[i] != 0)//只对还未标记为0的数进行处理
{
for(int multiple = i * 2; multiple <= n; multiple += i)
{
arr[multiple] = 0;
}
}
}
int PrimeCount = 0;
int ZeroCount = 0;
for(i = 2; i <= n; i++)
{
if(arr[i] == 0)
{
ZeroCount++;
}
else
{
if(PrimeCount > 0)//防止格式问题,只有不是第一个素数才输出空格
{
printf(" ");
}
printf("%d",arr[i]);
PrimeCount++;
}
}
printf("\n%d",ZeroCount);
return 0;
}
查看5道真题和解析