题目的意思是:给你一个数N,求由连续的m个素数之和等于N的组数。
这题很简单,一开始没看到题目是连续的素数,所以一开始想用深搜来做,可是不行,后来再看了题目,才知道是连续的素数,是连续的素数就简单很多了。
下面的是 AC的代码:
#include <iostream>
using namespace std;
int prime[10005];
int main()
{
int i, j, k;
for(i = 0; i < 10005; i++)
prime[i] = 1;
prime[0] = 0; prime[1] = 0;
for(i = 2; i < 10005; i++) //判断10005以内的所以素数。
{
if(prime[i])
{
for(j = i + i; j < 10005; j += i)
prime[j] = 0;
}
}
int count, sum;
while(cin >> k && k)
{
for(i = 2, count = 0; i < 10005; i++) //找有多少组
{
if(!prime[i])
continue;
for(j = i, sum = 0; sum < k && j < 10005; j++)
{
if(prime[j])
sum += j;
if(sum == k)
{
count++;
break;
}
}
}
cout << count << endl;
}
return 0;
}