题目
题目描述
令Pi表示第i(i从1开始计数)个素数。现任给两个正整数M <= N <= 10000,请输出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
代码
线性筛素数
cpp
#include<iostream>
using namespace std;
const int N = 105000;
int p[N], idx = 1;
bool st[N];
void get_primes() {
for(int i = 2; i < N; i ++ ) {
if(!st[i]) p[idx ++ ] = i;
for(int j = 1; p[j] <= N / i; j ++ ) {
st[i * p[j]] = true;
if(i % p[j] == 0) break;
}
}
}
int main() {
int m, n;
cin >> m >> n;
get_primes();
int cnt = 0;
for(int i = m; i <= n; i ++ ) {
if(cnt == 0) printf("%d", p[i]);
else if(cnt % 10 == 0) printf("\n%d",p[i]);
else printf(" %d", p[i]);
cnt ++;
}
return 0;
}