题解:
本题采用了哈希思想。
1.找出2-10000所有质数。
2.类比哈希思想比较字符串的方法,算出质数的前缀和。比如:1 3 5 7 9 a[1]=1,a[2]=1+3,a[3]=1+3+5…
3.
for(i=0; i<=t; i++)
{
for(j=i+1; j<=t; j++)
{
if((Hash[j]-Hash[i])==n)
ans++;
}
}
利用暴力的方法找出与n相等的质数串。需要注意的是i从0开始。
#include<bits/stdc++.h>
using namespace std;
int prime(int x)
{
int i;
for(i=2; i<=sqrt(x); i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
int i,j,t,ans;
int Hash[10001],a[10001];
t=0;
for(i=2; i<=10000; i++)
{
if(prime(i))
{
a[++t]=i;
}
}
Hash[0]=0;
for(i=1; i<=t; i++)
{
Hash[i]=Hash[i-1]+a[i];
}
ans=0;
for(i=0; i<=t; i++)
{
for(j=i+1; j<=t; j++)
{
if((Hash[j]-Hash[i])==n)
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}