1013 数素数 (20分)
令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。
输入格式:
输入在一行中给出 M 和 N,其间以空格分隔。
输出格式:
输出从 PM 到 PN 的所有素数,每 10 个数字占 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
题目较简单,还是用埃拉托斯特尼筛子法。看代码
1 #include<iostream> 2 #define N 104750 3 using namespace std; 4 int main () 5 { 6 int m,n; 7 cin>>m>>n; 8 int tem; 9 int v[N]={0}; 10 for(int i=2;i<=N/2;i++) //剔除合数,余下的为素数 11 { 12 tem=i; 13 if(v[tem]==0) 14 { 15 while(tem<N) 16 { 17 tem+=i; 18 if(tem<N) 19 v[tem]=1; 20 } 21 } 22 } 23 int index=0,num=0; 24 for(int i=2;i<N;i++) 25 { 26 if(v[i]==0) 27 { 28 index++; //记录第几个素数 29 if(index>n) 30 break; 31 if(index>=m&&index<=n) //输出第[m,n]这一区间的素数 32 { 33 num++; 34 if(num%10==0) //输出每行第十个数后换行 35 cout<<i<<endl; 36 else if(index<n) 37 cout<<i<<" "; 38 else 39 cout<<i; 40 } 41 } 42 } 43 return 0; 44 }
ac了