题目
给定一个10000以内的数字,判断这个数字是否可以由几个连续的素数(例如:2,3,5,7...)相加得到,并且给出这个数可以有几组这样的解。
输入:每行一个数字,0为退出
输出:每行一个数字,对应输入的每个数字的解的组数。
#include <iostream>
#include <cmath>
#include <cmath>
using namespace std;
int main()
{
int a[1300];
int k=0;
for(int i=2;i<=10000;i++)
{
int flag=0;
for(int j=2;j<=(int)sqrt((double)i);j++)//平方根省时间
{
if(i%j==0)
{
flag=1;
}
}
if(!flag)
{
//cout<<i<<endl;
a[k++]=i;
}
}
//cout<<k<<endl;把以上过程拿到循环外面省时间
int n;
while(cin>>n && n)
{
int flag1=0;
for(int x=0;a[x]<=n;x++)
{
int cnt=0;
for(int y=x;a[y]<=n;y++)
{
cnt+=a[y];
if(cnt==n)
{
flag1++;
}
}
}
cout<<flag1<<endl;
}
return 0;
}
{
int a[1300];
int k=0;
for(int i=2;i<=10000;i++)
{
int flag=0;
for(int j=2;j<=(int)sqrt((double)i);j++)//平方根省时间
{
if(i%j==0)
{
flag=1;
}
}
if(!flag)
{
//cout<<i<<endl;
a[k++]=i;
}
}
//cout<<k<<endl;把以上过程拿到循环外面省时间
int n;
while(cin>>n && n)
{
int flag1=0;
for(int x=0;a[x]<=n;x++)
{
int cnt=0;
for(int y=x;a[y]<=n;y++)
{
cnt+=a[y];
if(cnt==n)
{
flag1++;
}
}
}
cout<<flag1<<endl;
}
return 0;
}