POJ_2739_Sum_of_Consecutive_Prime_Numbers

描述


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 }

时间: 2024-10-06 04:46:30

POJ_2739_Sum_of_Consecutive_Prime_Numbers的相关文章