输入:
2
3
17
41
20
666
12
53
0
输出:
1
1
2
3
0
0
1
2
#include <iostream>
using namespace std;
const int maxp = 2000, n = 10000;
int prime[maxp], total = 0;
bool isprime(int k) //bool函数用来求素数
{
for (int i = 0; i < total; i++)
if (k % prime[i] == 0) //判断素数的一种方法(用这个数对数组当中所有的 素数 进行取余;
return false;
return true;
}
int main()
{
for (int i = 2; i < n; i++)
if (isprime(i))
prime[total++] = i; //total++是先用后加。此处之前的代码是把2~n之间的素数全部都存储到prime[total]数组中。
prime[total] = n + 1;
int m;
cin >> m;
while (m)
{
int ans = 0; //用于计算个数
for (int i = 0; prime[i] <= m; i++) //外层循环用来枚举所有的可能性
{
int cnt = 0; //求和
for (int j = i; j < total, cnt < m; j++) //内循环用来判断所求和的大小是否符合
cnt += prime[j];
if (cnt == m)
++ans;
}
cout << ans << endl;
cin >> m;
}
return 0;
}
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
bool isPrime(int k) //bool函数用来求素数
{
for (int i = 2; i <= sqrt(k); i++)
{
if (k % i == 0)
return false;
}
return true;
}
int main()
{
const int n = 10000;
vector<int> arr; //用来存放2~10000之间的所有素数;
for (int i = 2; i <= n; i++)
{
if (isPrime(i))
arr.push_back(i);
}
int num; //定义输入的整数;
cin >> num;
while (num) //非0一直循环输入,0停止循环;
{
int ans = 0; // 个数;
for (int i = 0; arr[i] <= num; i++) //外层循环用来枚举所有的可能性
{
int sum = 0;
for (int j = i; sum < num; j++) //内循环用来判断所求和的大小是否符合
sum += arr[j];
if (sum == num)
ans++;
}
cout << ans << endl;
cin >> num;
}
return 0;
}