一、題目介紹
輸入描述:
多組輸入,每行輸入一個(gè)正整數(shù)(不大于100)。
輸出描述:
針對(duì)每行輸入的整數(shù)n,輸出兩行,第一行,輸出n之內(nèi)(包括n)的素?cái)?shù),用空格分隔,
第二行,輸出數(shù)組中2之后被清0 的個(gè)數(shù)。每行輸出后換行
二、篩選法
篩選法求解過程為:將2~n之間的正整數(shù)放在數(shù)組內(nèi)存儲(chǔ),將數(shù)組中2之后的所有能被2整除的數(shù)清0,再將3之后的所有能被3整除的數(shù)清0 ,以此類推,直到n為止。
數(shù)組中不為0 的數(shù)即為素?cái)?shù)。
三、解析
首先,創(chuàng)造一個(gè)數(shù)組,在數(shù)組內(nèi)放置1~n的整數(shù)。
其次,要利用篩選法的機(jī)制,2之后的所有能被2整除的數(shù)字清0,在這里需要使用for的雙層嵌套,文章來源:http://www.zghlxwxcb.cn/news/detail-643475.html
表示,arr[1]? 需要被arr[2] ~arr[n] 的數(shù)值全部模一遍,如若出現(xiàn)模等于0則設(shè)置這個(gè)模arr[1]的數(shù)值變?yōu)?。文章來源地址http://www.zghlxwxcb.cn/news/detail-643475.html
四、代碼演示
#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]內(nèi)存儲(chǔ)數(shù)字1
}
arr[0]=0;//把你的1拿出來不然會(huì)出錯(cuò)!因?yàn)槿魏螖?shù)除去1都是整除的
for(int i =1;i<n;i++)
{
if(arr[i]==0)
{
continue;
}
for(int j =i+1;j<n;j++)
//數(shù)組中2之后的所有能被2整除的數(shù)清0,再把3之后的所有能被3整除的數(shù)字清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;
}
到了這里,關(guān)于使用篩選法求出 n 以內(nèi)的素?cái)?shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!