比赛 |
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;
}