题意:求有多少种连续素数和是n,n的范围:2~10000
分析:预处理出10000内的素数,然后每输入一个n就用二重循环找出sum==n的个数,因为素数约为1200个,O(n^2)不会超时
代码:
#include<iostream> #include<string> #include<cstring> #include<algorithm> #define max(a,b) a>b?a:b using namespace std; int n,prim[5000],vis[10010]; int k; void is_prim() { k=0; memset(vis,0,sizeof(vis)); for(int i=2;i<10010;i++){ if(!vis[i]){ prim[k++]=i; for(int j=2;j*i<10010;j++){ vis[j*i]=1; } } } } int main() { is_prim(); while(cin>>n){ if(!n) break; int tot=0; for(int i=0;i<k;i++){ int sum=0; for(int j=i;j<k;j++){ sum+=prim[j]; if(sum==n){ tot++;break; } if(sum>n) break; } } cout<<tot<<endl; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
POJ 2739 Sum of Consecutive Prime Numbers-数论-(连续素数和)
原文:http://blog.csdn.net/ac_0_summer/article/details/46878787