1013 数素数
令 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
有一个测试点卡了很久, 原因是数组开的不够大(当时开了10010), 因为第10000个素数比10000大, 所以数组应再扩大, 开到1000010就过了
#include <iostream> using namespace std; const int MAX = 1000010; int n, cnt; int prime[MAX]; bool vis[MAX]; void Prime() { for(int i = 2; i <= MAX; ++ i) { if(!vis[i]) { prime[++cnt] = i; } for(int j = 1; (j <= cnt) && (i * prime[j] <= MAX); ++ j) { vis[i * prime[j]] = true; if(i % prime[j] == 0) break; } } } int main() { Prime(); int m, n, sum = 1; cin >> m >> n; for(int i = m; i <= n; ++ i) { if(sum % 10 == 0 && i < n) { cout << prime[i] << endl; } else if(i == n) { cout << prime[i]; } else { cout << prime[i] << " "; } sum ++; } return 0; }