描述
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。
输入描述:
多组输入,每行输入一个正整数(不大于100)。
输出描述:
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,
第二行,输出数组中2之后被清0 的个数。每行输出后换行。
示例1
输入:
20
输出:
2 3 5 7 11 13 17 19
11
思路
1.先将2-n 之间的所有数存放在一个数组
2遍历数组 创建除数变量j 每次遍历将除数j加一,如果被整除就把该元素变为0
3输出 遍历数组 将非0元素输出 定义计数器cnt储存0的数量
AC代码为
#include<stdio.h>
int main()
{
int n = 0;
int i = 0;
scanf("%d", &n);
int arr[105] = { 0 };
for (i = 2; i <= n; i++)//储存2--n的整数
{
arr[i] = i;
}
for (i = 2; i < n; i++)//遍历数组
{
int j = 0;
for (j = i+1; j <= n; j++)//j从i+1开始
{
if (arr[j] % i == 0)//如果被整除 就将该元素化为0
{
arr[j] = 0;
}
}
}
int cnt = 0;
for (i = 2; i <= n; i++)
{
if (arr[i] != 0)//如果非0,打印
printf("%d ", arr[i]);
else//如果为0 计数器cnt+1
cnt++;
}
printf("\n%d", cnt);
return 0;
}
版权声明:本文为m0_72670269原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。