方法:先算出10000以内的所有素数存表,然后每输入一个数n,从表头指针i和表尾指针j开始找符合的区间。
code:
#include <iostream>
#include <math.h>
#include <fstream>
using namespace std;
bool isPrime(int n)
{
if (n == 2)
return true;
for (int i = 2; i < (int)sqrt((double)n)+1; i++)
{
if (n%i == 0)
return false;
}
return true;
}
int main()
{
fstream in("input.txt");
int j=0,n,sum=0;
int prime[1229],len=1229;
//构造素数表
for (int i = 2; i < 10000; i++)
{
if (isPrime(i))
prime[j++]=i;
}
while (cin >> n)
{
if (!n)
break;
int ans = 0;
for (int i = 0; i < len; i++)
{
sum = 0;
for (int j = i; j < len; j++)
{
sum += prime[j];
if (sum > n)
break;
else if (sum == n)
{
ans++;
break;
}
}
}
cout << ans << endl;
}
//system("pause");
return 0;
}