令Pi表示第i個(gè)素?cái)?shù)』细剩現(xiàn)任給兩個(gè)正整數(shù)M <= N <= 104敦捧,請(qǐng)輸出PM到PN的所有素?cái)?shù)袜香。
輸入格式:
輸入在一行中給出M和N吃谣,其間以空格分隔乞封。
輸出格式:
輸出從PM到PN的所有素?cái)?shù),每10個(gè)數(shù)字占1行岗憋,其間以空格分隔肃晚,但行末不得有多余空格。
輸入樣例:
5 27
輸出樣例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
思路:使用篩選法仔戈,現(xiàn)將素?cái)?shù)篩選出來关串,然后對(duì)其進(jìn)行操作。
測(cè)試點(diǎn)4:是個(gè)比較大的數(shù)據(jù)监徘。
#include <iostream>
#include <cmath>
using namespace std;
int isprime(int n){
int i;
for(i=2;i<=(int)sqrt((double)n);++i){
if(n%i==0) return 0;
}
return 1;
}
int main()
{
int M,N,k=0;
cin>>M>>N;
int a[110000];
for(int i=2,j=0;i!=110000;++i){
if(isprime(i)){
a[j++]=i;
}
}
for(int i=M-1;i<N; ++i){
if(k<9&&i!=N-1){
cout<<a[i]<<" ";
k++;
}
else if(k==9&&i!=N-1) {
cout<<a[i]<<endl;
k=0;
}
else if(i==N-1) {
cout<<a[i];
}
}
return 0;
}
篩選法:
先把N個(gè)自然數(shù)按次序排列起來晋修。1不是質(zhì)數(shù),也不是合數(shù)凰盔,要?jiǎng)澣ツ关浴5诙€(gè)數(shù)2是質(zhì)數(shù)留下來,而把2后面所有能被2整除的數(shù)都劃去户敬。2后面第一個(gè)沒劃去的數(shù)是3落剪,把3留下,再把3后面所有能被3整除的數(shù)都劃去尿庐。3后面第一個(gè)沒劃去的數(shù)是5忠怖,把5留下,再把5后面所有能被5整除的數(shù)都劃去抄瑟。這樣一直做下去凡泣,就會(huì)把不超過N的全部合數(shù)都篩掉,留下的就是不超過N的全部質(zhì)數(shù)锐借。