zoukankan      html  css  js  c++  java
  • HDU 2098 分拆素数和(素数)

    HDU 2098 分拆素数和(素数)

    http://acm.hdu.edu.cn/showproblem.php?pid=2098

    题意:

           给你一个偶数,问你这个偶数有多少种方式能由两个不同的素数构成?

    分析:

           首先求出10000以内的全部素数。

           假设这个偶数X能有两个不同的素数构成,那么一定一个小于(X/2-1). 仅仅要从小到大枚举这个比較小的素数a。然后看看X-b是否是素数就可以得到一种组合方式。

           依次统计全部组合方式就可以。

    AC代码:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int maxn=10000;
    
    //flag[i]==1表i是素数
    bool flag[maxn+5];
    int prime[maxn+5];
    
    //筛选法求maxn内全部素数
    int get_prime()
    {
        for(int i=2;i<=maxn;i++)
        {
            if(!prime[i])
            {
                prime[++prime[0]]=i;
                flag[i]=true;
            }
            for(int j=1;j<=prime[0] && prime[j]<=maxn/i; j++)
            {
                prime[prime[j]*i]=1;
                if(i%prime[j]==0) break;
            }
        }
        return prime[0];
    }
    
    int main()
    {
        get_prime();
    
        int x;
        while(scanf("%d",&x)==1 && x)
        {
            int ans=0;//方法数
            for(int i=1;i<=prime[0] && prime[i]<= x/2-1;i++)
            {
                if(flag[x-prime[i]]) ans++;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    

  • 相关阅读:
    spring容器启动
    springmvc流程
    bean作用域
    bean的生命周期
    web.xml详解
    设计模式 工厂和抽象工厂
    requests 模块
    爬虫基础
    提高级
    循环语句
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5142111.html
Copyright © 2011-2022 走看看