输入n,输出从2到n的所有素数,用空格隔开,输出该区间内不为素数的个数。
#include <stdio.h>
int main()
{
int n, count = 0, a[101];
scanf("%d", &n);
for (int i = 0; i <= n; i++)
{
a[i] = 1;
}
for (int i = 2; i <= n/i; i++)//i <= n/i 等价于 i <= sqrt(n);
{
if (a[i] == 1)//防止被筛后的数又进行筛除。
{
for (int j = 2*i; j <= n; j += i)
//倍数 —> 乘法 —> 加法 —> 一个数的倍数,依次加上它本身。(注:j不能从i开始,要从i*2开始
//从2开始,筛完2的倍数后,下一个数则为素数,并且从这个数开始又进行倍数筛除。
{
a[j] = 0;//倍数,不是素数,标记 0 ;
}
}
}
for (int i = 2; i <= n; i++)
{
if (a[i])
{
printf("%d ", i);
}
if (!a[i])
{
count++;
}
}
printf("\n%d", count);
return 0;
}