/* 1259. Sum of Consecutive Primes
题目大意:给出一个数n,求出n可以用连续素数和表示的总数
如41 = 2+3+5+7+11+13或11+13+17或41,有3总
思路:先用筛法求出一个大范围内的素数数组,然后在该数组
中进行傻逼式的试和....
*/
#include<iostream>
#include<stdlib.h>
#include<algorithm>
#include<memory.h>
#include<math.h>
using namespace std;
const int MAX = 10000;
int prime[50000];
bool primeBool[MAX+1];
int presentationNum;
int primeNum ;
//筛法求素数
int searchprime(){
memset(primeBool, true, sizeof(primeBool));
primeBool[1] = false;
for(int i=2; i<= (int)floor(sqrt((double)MAX)); i++){
if(primeBool[i]){
int j = i*2;
while(j <= MAX){
primeBool[j] = false;
j += i;
}
}
}
int sizeOfPrime = 0;
for(int i = 1; i <= MAX; i++){
if(primeBool[i]){
sizeOfPrime++;
prime[sizeOfPrime] = i;
}
}
return sizeOfPrime;
}
void cal(int x){
for(int i =1; i<= primeNum && prime[i] <= x; i++){
int sum = 0;
int j = i;
while(sum <= x){
//cout << " " << prime[j] << endl;
sum += prime[j];
if(sum == x) {
presentationNum++;
break;
}
j++;
}
}
}
int main()
{
primeNum = searchprime();
int n;
while(cin >> n && n !=0){
presentationNum = 0;
cal(n);
cout << presentationNum << endl;
}
system("pause");
return 0;
}
1259. Sum of Consecutive Primes(连续素数求和)
最新推荐文章于 2021-12-15 19:31:26 发布