透過搜尋質數演算法,並紀錄累計值

再輸出結果即可

 

#include <iostream>
#include <cstring>

constexpr int upper_bound = 1001;

using namespace std;

void setPrime(bool _p[], int _prime[], int _acc[])
{
    memset(_p, true, upper_bound);
    _p[1] = true;
    _prime[0] = 1;
    _acc[1] = 1;

    for(int i = 2; i<upper_bound; i+=1){
        if(_p[i]){
            for(int j = i*2; j<upper_bound; j+=i)
                _p[j] = false;

            _prime[_acc[i-1]] = i;
            _acc[i] = _acc[i-1] + 1;
        }else
            _acc[i] = _acc[i-1];
    }
}

int main()
{
    int  accumulate[upper_bound] = {};
    int  prime[upper_bound] = {};
    bool p[upper_bound] = {};
    setPrime(p, prime, accumulate);

    int N, C;
    while(cin >> N >> C){
        int query = ( accumulate[N]%2 ? 2*C-1 : 2*C );
        if(query > accumulate[N])
            query = accumulate[N];

        cout << N << " " << C << ":";
        for(int i = 0; i<query; i+=1)
            cout << " "<< prime[ (accumulate[N] - query)/2 + i ];
        cout << endl << endl;
    }

    return 0;
}

 

arrow
arrow
    全站熱搜

    大神(偽) 發表在 痞客邦 留言(0) 人氣()