数素数 (PATB-1013)

题面

令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤10^4,请输出 PM 到 PN 的所有素数。

输入

输入在一行中给出 M 和 N,其间以空格分隔。

输出

输出从 PM 到 PN 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。

样例输入

15 27

样例输出

111 13 17 19 23 29 31 37 41 43
247 53 59 61 67 71 73 79 83 89
397 101 103

提示

思路

代码

 1const int mxn = 1e6 + 5;
 2bool isP[mxn];
 3int prime[mxn];
 4
 5int euler(int n)
 6{
 7    memset(isP, 1, sizeof isP);
 8    isP[0] = isP[1] = 0;
 9
10    int cnt = 0;
11    for (int i = 2; i <= n; i++)
12    {
13        if (isP[i]) prime[++cnt] = i;
14        for (int j = 1; j <= cnt; j++)
15        {
16            if (i * prime[j] > n) break;
17            isP[i * prime[j]] = 0;
18            if (i % prime[j] == 0) break;
19        }
20    }
21    return cnt;
22}
23
24int n, m;
25
26int main()
27{
28    int cnt = euler(N);
29    scanf("%d %d", &n, &m);
30
31    int nf = 0, lc = 0;
32    for (int i = n; i <= m; i++)
33    {
34        if (nf)
35            printf(" ");
36        else
37            nf = 1;
38
39        printf("%d", prime[i]);
40        lc++;
41
42        if (lc % 10 == 0)
43        {
44            nf = 0;
45            printf("\n");
46        }
47    }
48
49    return 0;
50}