一、题目介绍
输入描述:
多组输入,每行输入一个正整数(不大于100)。
输出描述:
针对每行输入的整数n,输出两行,第一行,输出n之内(包括n)的素数,用空格分隔,
第二行,输出数组中2之后被清0 的个数。每行输出后换行
二、筛选法
筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。
数组中不为0 的数即为素数。
三、解析
首先,创造一个数组,在数组内放置1~n的整数。
其次,要利用筛选法的机制,2之后的所有能被2整除的数字清0,在这里需要使用for的双层嵌套,
表示,arr[1] 需要被arr[2] ~arr[n] 的数值全部模一遍,如若出现模等于0则设置这个模arr[1]的数值变为0。
四、代码演示
#include <stdio.h>int main()
{int n =0;int count =0;int arr[1000];while(scanf("%d",&n)!=EOF)//多组输入{for(int i =0;i<n;i++){arr[i]=i+1;//arr[0]内存储数字1}arr[0]=0;//把你的1拿出来不然会出错!因为任何数除去1都是整除的for(int i =1;i<n;i++){if(arr[i]==0){continue;}for(int j =i+1;j<n;j++)//数组中2之后的所有能被2整除的数清0,再把3之后的所有能被3整除的数字清0{if(arr[j]!=0){if(arr[j]%arr[i]==0){arr[j]=0;count++;}}}}for(int i=0;i<n;i++){if(arr[i]!=0){printf("%d ",arr[i]);}}printf("\n");printf("%d",count);}return 0;
}