POJ-2739 Sum of Consecutive Prime Numbers
题目链接:POJ-2739
题目大意:某些数组可以表示为连续的素数之和,问你给定一个数,有多少种素数之和的表示形式
解题思路:对范围内的素数进行存储,之后向下搜索和为给定数就sum++
代码块:
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int n;
int sum = 0;
vector<int> isP;
int sumIndex = 0;
bool isPrime(int n) {
if(n == 2 || n == 3) return true;
if(n % 6 != 1 && n % 6 != 5) return false;
for(int i = 5; i <= floor( sqrt(n) ); i += 6) {
if(n % i == 0 || n % (i + 2) == 0) return false;
}
return true;
}
void findSum(int x, int sumValue){
if(sumValue > n) return;
if(sumValue == n){
sum++;
return;
}
findSum(x + 1, sumValue + isP[x + 1]);
}
int main() {
for(int i = 2; i < 10000; i++){
if(isPrime(i)){
isP.push_back(i);
sumIndex++;
}
}
while(cin>>n){
if(n == 0) return 0;
for(int i = 0; i < sumIndex; i++){
if(isP[i] <= n) findSum(i, isP[i]);
}
cout<<sum<<endl;
sum = 0;
}
return 0;
}