题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1595
这个题涉及到筛法找素数算法,以及几个计数的技巧感觉自己用的挺好的。
#include <iostream>
#include <cmath>
using namespace std;
#define MAX 1001
int main()
{
freopen("in.txt","r",stdin);
int i,j,k,l,N,C;
bool prime[MAX];
for(i = 1;i < MAX;++i)
prime[i] = true;
j = sqrt(MAX);
for(i = 2;i <= j;++i)
{
if(prime[i])
{
k = i * i;
while(k < MAX)
{
prime[k] = false;
k += i;
}
}
}
while(cin >> N >> C)
{
for(i = 1,k = 0;i <= N;++i)
if(prime[i])
++k;
if(k % 2 == 0)
j = 2 * C;
else
j = 2 * C - 1;
cout << N << ' ' << C << ':';
if(j >= k)
{
for(i = 1;i <= N;++i)
if(prime[i])
cout << ' ' << i;
}
else
{
l = (k - j) / 2;
for(i = 1;i <= N;++i)
{
if(prime[i])
{
if(l != 0)
--l;
else if(j != 0)
{
cout << ' ' << i;
--j;
}
else
break;
}
}
}
cout << endl << endl;
}
return 0;
}