比赛 20100913 评测结果 AAAAAAAAAA
题目名称 连续素数和 最终得分 100
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-09-13 20:33:51
显示代码纯文本
#include <fstream>
#include <cmath>

#define I_F "conprime.in"
#define O_F "conprime.out"
#define MAX 10000

using namespace std;

int maxn,pn=1;
int prime[MAX]={2};

bool Pd_prime(int x);
void Get_primes();

int main()
{
	ifstream fin(I_F);
	ofstream fout(O_F);
	
	int i,j,m,t,n;
	for (fin>>n; n>0; fin>>n)
	{
		if (n>maxn)
		{
			maxn=n;
			Get_primes();
		}
		m=0;
		for (i=0; (i<pn)&&(prime[i]<=n); i++)
		{
			t=0;
			for (j=i; (j<pn)&&(t<n); j++)
				t+=prime[j];
			if (t==n)
			{
				m++;
				i++;
			}
		}
		fout<<m<<endl;
	}
	
	fin.close();
	fout.close();
}

bool Pd_prime(int x)
{
	int i,t=(int)sqrt((double)x);
	for (i=0; (i<=t)&&(i<pn); i++)
		if (x%prime[i]==0)
			return false;
	return true;
}

void Get_primes()
{
	for (int i=prime[pn-1]+(1+(prime[pn-1]%2)); i<=maxn; i+=2)
		if (Pd_prime(i))
			prime[pn++]=i;
}