比赛 20100913 评测结果 WWWEEEEEEA
题目名称 连续素数和 最终得分 10
用户昵称 了反取字名我擦 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-09-13 20:18:32
显示代码纯文本
#include<fstream>
#include<algorithm>
#include<string>

using namespace std;
ifstream fi("conprime.in");
ofstream fo("conprime.out");

void dfs(int k);
void input();
void prime2();

int data[10]={0},prime[3000]={0},p=0,ans=0,u=0;
bool pri=0;

void prime2()
{
	int fg=0;
	for(int i=2;i<10000;i++)
		if(i%10==1||i%10==3||i%10==7||i%10==9||i==2||i==5)
		{
			for(int j=0;j<p;j++)
				if(i%prime[j]==0)
					fg=1;
			if(fg==0){prime[p]=i;p++;}
			else fg=0;
		}
}
void input()
{
	for(int i=0;data[i-1]!=0;i++)
		fi>>data[i];
}
int main()
{
	prime2();
	data[-1]=1;
	input();
	for(int i=0;data[i]!=0;i++)
	{
		dfs(data[i]);
		for(int j=0;j<p;j++)
		{
			if(data[i]==prime[j])
				{ans++;break;}
			if(data[i]<prime[j])
				break;
		}
		fo<<ans<<endl;
		ans=0;
	}
	fi.close();
	fo.close();
	return 0;
}
void dfs(int k)
{
	if(k==0){ans++;return;}
	if(k<0)return;
	for(int i=0;prime[i]<k/2+1;i++)
		if(!pri)
		{
			pri=1;
			u=i;
			dfs(k-prime[i]);
			u=0;
			pri=0;
		} 
	if(pri){u++;dfs(k-prime[u]);}
}