描述
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