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