码迷,mamicode.com
首页 > 其他好文 > 详细

POJ_2739_Sum_of_Consecutive_Prime_Numbers

时间:2016-04-23 10:27:57      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

描述


http://poj.org/problem?id=2739

多次询问,对于一个给定的n,求有多少组连续的素数,满足连续素数之和为n.

分析


尺取法.

打个素数表,对于每一个n,尺取之.

换了种尺取法的写法= =.

技术分享
 1 #include<cstdio>
 2 
 3 const int maxn=10005;
 4 int p,n;
 5 int prime[maxn];
 6 bool is_prime[maxn];
 7 
 8 void get_prime()
 9 {
10     for(int i=1;i<maxn;i++) is_prime[i]=true;
11     is_prime[0]=is_prime[1]=false;
12     p=0;
13     for(int i=2;i<maxn;i++)
14     {
15         if(is_prime[i])
16         {
17             prime[++p]=i;
18             for(int j=2*i;j<maxn;j+=i) is_prime[j]=false;
19         }
20     }
21 }
22 
23 void solve()
24 {
25     int l=1,r=0,sum=0,ans=0;
26     while(l<=p&&r<=p&&prime[l]<=n&&prime[r]<=n)
27     {
28         if(sum==n) { ans++; sum-=prime[l++]; }
29         else if(sum>n) sum-=prime[l++];
30         else sum+=prime[++r];
31     }
32     printf("%d\n",ans);
33 }
34 
35 void init()
36 {
37     get_prime();
38     while(scanf("%d",&n)==1&&n!=0) solve();
39 }
40 
41 int main()
42 {
43     freopen("sum.in","r",stdin);
44     freopen("sum.out","w",stdout);
45     init();
46     fclose(stdin);
47     fclose(stdout);
48     return 0;
49 }
View Code

 

POJ_2739_Sum_of_Consecutive_Prime_Numbers

标签:

原文地址:http://www.cnblogs.com/Sunnie69/p/5424017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!