• poj2739(尺取法)


    Sum of Consecutive Prime Numbers

    题意:

      给出一个数n,它可以表示为连续的素数相加之和,问一共有多少种表示方法?

    分析:

      枚举每个素数为左端点,根据区间和确定其右端点,如果区间和大于n,左端点右移,如果等于n,则方法数+1。

    代码:

    #include <map>
    #include <math.h>
    #include <string>
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define cls(x) memset(x,0,sizeof(x))
    #define clslow(x) memset(x,-1,sizeof(x))
    
    const int maxn=1e4+100;
    
    int n,cnt;
    
    bool vis[maxn];
    int prime[maxn],sum[maxn];
    
    void init()
    {
        cnt=0;
        cls(vis);
        vis[1]=true;
        for(int i=2;i<maxn;i++){
            for(int j=i*i;j<maxn&&!vis[i];j+=i){
                vis[j]=true;
            }
        }
        for(int i=1;i<maxn;i++){
            if(!vis[i])    prime[++cnt]=i;
        }
    
        sum[0]=0;
        for(int i=1;i<=cnt;i++){
            if(i==1)    sum[i]=prime[i];
            else        sum[i]=sum[i-1]+prime[i];
        }
    }
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        init();
        while(scanf("%d",&n)!=EOF&&n)
        {
            int s=0,e=1,ans=0;
            while(e<cnt)
            {
                int val=sum[e]-sum[s];
                if(val==n)  ans++;
                if(val>n)   s++;
                else        e++;
                if(s==e)    e++;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    complete完成量——实例分析
    worker线程的创建与使用
    SDIO接口
    Linux中V4L2分析
    Linux系统调用分析
    ppm图片显示
    应用层与内核层错误打印函数总结
    高通Sensor驱动学习笔记
    linux中新增一个shell命令的方法
    RTC测试程序
  • 原文地址:https://www.cnblogs.com/shutdown113/p/9389260.html
Copyright © 2020-2023  润新知