poj 1595 zoj 1312 Prime Cuts

/*
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[N],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;
}

你可能感兴趣的:(poj 1595 zoj 1312 Prime Cuts)