您的位置:首页 > 其它

poj1595 水题

2013-07-23 15:25 155 查看
题意:输入n, 和c
统计1 - n 有多少个素数为cnt
若 2*c > cnt 则将素数全部输出
否则分支判断:
若cnt 为偶数,则从中心开始输出2*c 个
若cnt 为奇数,则从中心开始输出2*c-1个

/*
题意:输入n, 和c
统计1 - n 有多少个素数为cnt
若 2*c > cnt 则将素数全部输出
否则分支判断:
若cnt 为偶数,则从中心开始输出2*c 个
若cnt 为奇数,则从中心开始输出2*c-1个
*/
#include <iostream>
using namespace std;
bool prm[1005];    //全局为false
void Prime()
{
int i, t;
prm[1] = false;
for (i=2; i<1005; i++)
{
if (!prm[i])
{
t = i<<1;
while (t<1005)
{
prm[t] = true;
t+= i;
}
}
}
}
int main()
{
int n, c, i, j, cnt;
Prime();
while (cin>>n>>c)
{
cout<<n<<" "<<c<<":";
for (i=1, cnt=0; i<=n; i++)
{
if (!prm[i])
cnt++;
}
//for (i=1; i<=n; i++)
//        if (!prm[i])
//            cout<<i<<" ";
//    cout<<endl;
if (2*c > cnt)
{
for (i=1; i<=n; i++)
if (!prm[i])
cout<<" "<<i;
cout<<endl;
/*continue;*/
}
else
{
if (cnt % 2 == 0)
{
for (j=1, i=1; j<(cnt-2*c)/2+1;i++)
{
if (!prm[i])
j++;
}
for (j=0; j<2*c; i++)
if (!prm[i])
{
j++;
cout<<" "<<i;
}
cout<<endl;
}
else
{
for (j=1, i=1; j<(cnt-2*c+1)/2+1;i++)
{
if (!prm[i])
j++;
}
for (j=1; j<2*c; i++)
if (!prm[i])
{
j++;
cout<<" "<<i;
}
cout<<endl;
}
}
cout<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: