题目链接: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; }