PAT-BASIC-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

 

筛子法打一个primeTable之后,将素数枚举进vector,之前某题用过这个trick

注意m,n的从1开始还是从0开始的问题

#include <bits/stdc++.h>

#define MAXN 200000+50
using namespace std;

vector<int> arr;
bool hashTable[MAXN];
int main()
{
    memset(hashTable, true, sizeof(hashTable));
    for(int i = 2; i < MAXN; ++i){
        if(hashTable[i]){
            for(int j = 2; i*j < MAXN; ++j){
                hashTable[i*j] = false;
            }
        }
    }
    for(int i = 2; i < MAXN; ++i){
        if(hashTable[i]){
            arr.push_back(i);
        }
    }
    int m, n;
    scanf("%d%d", &m, &n);
    m--, n--;
    for(int i = m; i <= n; ++i){
        //first
        if((i-m)%10 == 0){
            printf("%d", arr[i]);
        }
        else{
            printf(" %d", arr[i]);
        }
        if((i-m)%10 == 9){
            printf("\n");
        }
    }
    return 0;
}
CAPOUIS'CODE

 

posted @ 2015-06-27 23:35  CAPOUIS  阅读(133)  评论(0)    收藏  举报