题目大意是给一个数,问共有几组连续的质数之和与它相等
代码如下:
#include<cstdio>
#include<vector>
#include<math.h>
using namespace std;
int prime(int a) //判断是否为质数
{
for(int i=2;i<=sqrt(a);i++)
{
if(a%i==0)
return 0;
}
return 1;
}
int q1[4000][4000]={0};
int N=0;
void find(){ //找出所有的2-10000内所有的质数,并算出所有的连续的质数的和
int sum=0;
vector <int> q;
for(int i=2;i<10000;i++)
{
if(prime(i))
q.push_back(i);
}
N=q.size();
for(int i=0;i<N;i++)
{
sum+=q[i];
q1[0][i]=sum;
}
for(int i=1;i<N;i++)
{
for(int j=i;j<N;j++)
{
q1[i][j]=q1[0][j]-q1[0][i-1];
}
}
}
int main(){
int a;
find();
while(scanf("%d",&a)&&a!=0)
{
int num=0;
for(int i=0;i<N;i++)
{
for(int j=i;j<N;j++)
{
if(q1[i][j]==a)
num++;
if(q1[i][j]>a)
break;
}
}
printf("%d\n",num);
}
}