• 筛素数 poj 2739


    题目链接:https://vjudge.net/problem/POJ-2739

    输入一个数字n,判断有没有一段连续的素数之和大于n,如果有,计算总共有几种。

    思路:用素数筛法求出10000以内的素数,然后可以用尺取法计算,我这里是计算先打表计算所有编号为i到编号为j的素数之和,然后再循环查找。

    代码:

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int vis[10010],num[1300],sum[1300][1300];
    int n,m,k,t,cnt;
    void play_table()
    {
        memset(vis,0,sizeof(vis));
        memset(sum,0,sizeof(sum));
        cnt=0;
        for(int i=2;i<=10000;i++)
        {
            if(!vis[i])
            {
                num[++cnt]=i;//记录素数
                vis[i]=1;
                for(int j=i*2;j<=10000;j+=i)
                vis[j]=1;
            }
        }
        for(int i=1;i<=cnt;i++)//计算i到j的和
        {
            for(int j=i;j<=cnt;j++)
            {
                sum[i][j]+=sum[i][j-1]+num[j];
            }
        }
    }
    int main()
    {
        play_table();
        while((cin>>n)&&n)
        {
            int ans=0;
            for(int i=1;i<=cnt;i++)
            {
                if(num[i]>n)
                break;
                for(int j=i;j<=cnt;j++)
                {
                    if(sum[i][j]>n)
                    break;
                    if(sum[i][j]==n)
                    {
                        ans++;
                    }
                }
            }
            cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Design Thinking 设计思维
    SELECT小技巧
    网站架构
    代码生成器重构
    如何监控你的鼠标
    Asp.net超轻异步框架
    跨线程修改UI控件
    NPOI组件
    浅析Linux计算机工作机制
    VS2010单元测试
  • 原文地址:https://www.cnblogs.com/6262369sss/p/9413714.html
Copyright © 2020-2023  润新知