您的位置:首页 > 其它

poj 1595 zoj 1312 Prime Cuts

2011-08-16 15:43 302 查看
/*
This problem nearly drive me crazy ...
不得不怀疑自己的智商
竟然连题都没看懂。。。
题目要求从质数表中部剪取一定数量的质数输出
而我竟然理解成从质数表的中心开始输出指定数量的质数
崩溃啊。。。
还有就是zoj的数据比poj的要强
poj 数组开到1001就能过
而且当初我是按在实例间打空格写的
也顺利通过
zoj的开到2001才能通过
而且必须严格遵照在每个实例后打空格的要求写
否则会PE
终于过了
提高智商ing。。。
*/
#define LOCAL
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<iomanip>
#include<string>
#include<algorithm>
#include<ctime>
#include<stack>
#include<queue>
#include<vector>
#define N 2005
using namespace std;
bool isprime(int n)
{
if(n==1||n==2) return true;
int i,t=(int)sqrt((double)n);
for(i=2;i<=t;i++)
{if(n%i==0) return false;}
return true;
}
int main()
{
#ifdef LOCAL
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
#endif

int nprime,i,n,c,prime
,start,end;
nprime=0;
for(i=1;i<N;i++)
{if(isprime(i)) prime[nprime++]=i;}
while(cin>>n>>c)
{
cout<<n<<" "<<c<<":";
nprime=0;
while(prime[nprime]<=n) nprime++;
if(c>=nprime)
{for(i=0;i<nprime;i++) cout<<" "<<prime[i];}
else
{
if(nprime%2==0) {start=nprime/2-c;end=nprime/2+c-1;c=c*2;}
else {start=nprime/2-c+1;end=nprime/2+c-1;;c=c*2-1;}
for(i=start;i<=end;i++) cout<<" "<<prime[i];
}
cout<<endl<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: