透過搜尋質數演算法,並紀錄累計值
再輸出結果即可
#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;
}
留言列表