• NUC1921 E.迷雾森林


    E.迷雾森林

    时间限制: 1000ms 内存限制: 65535KB

    问题描述
    【HuJie】今天的任务是去灵隐寺后的竹林里拾干柴,最近天越来越冷,天上的乌云聚集不散。天灰蒙蒙的,走进竹林里时,树叶沙沙作响,他一直觉得这个林子很奇怪,雪天依然树叶常青。等他捡的差不多了,正打算将干柴捆好背起来时,在他面前突然跳出一只大大的【Mon-Gee Gee】猴子。“OMG,我不会遇到孙悟空了吧,但是怎么没有金箍棒呢”【HuJie】还在愣愣的想着。【Mon-Gee Gee】开口了:“小和尚,我怎么从来没有见过你?新来的吧?”【HuJie】紧张的点点头。【Mon-Gee Gee】咧嘴一笑:“新来的就要懂规矩,本大王先问你一个问题。”【HuJie】当然不怕一只猴子,于是说“你说吧,什么题?” 【Mon-Gee Gee】开了口:“我们猴子家族冬天要储藏食物过冬,今年猴子们采摘了很多坚果,需要分开存放在两个不同的树洞里。不过呢,我们猴子家族有个传统,每个储藏事物的树洞里,坚果的总数必须是素数,否则非常不吉利。现在我有n个坚果,你告诉我有多少种不同的分法。你要是答对了,我就可以答应你一件事……”【HuJie】张口就答:“不就是……”【Mon-Gee Gee】马上插了一句:“答错了可就,嘿嘿嘿……”【HuJie】一听这话吓了一跳,赶忙着手计算不敢答错,聪明的你能帮他算出问题的答案吗?
    输入描述
    首先输入询问次数T(1≤T≤100),之后T行每行一个正整数n(1≤n≤1000)。
    输出描述
    输出将n拆分成两个素数之和的方法数。
    样例输入
    3
    2
    4
    10
    
    样例输出
    0
    1
    2
    
    来源
    2015中北大学‘计蒜客’杯新生赛
    提示
    2不能被拆分成两个素数和的形式,故输出0;4可以被拆分成4=2+2的形式,输出1;10可以被拆分成10=3+7和10=5+5的形式,输出2。


    问题分析:

    这个题与HDU2098类似,拿过来修改一下就可以了用。需要注意的是,条件有点不同。

    解决本问题,首先用Eratosthenes筛选法求得必要的素数,然后用试探法求可分解的个数。对于输入的偶数sum而言,如果能够分解成两个素数之和,其中一个必然小于或等于sum/2,基于这个原理进行分解计数,最后求出所有的组合。

    题目中所讲的故事,似乎与本题目的关系没那么大,绕了一大圈而已。

    程序说明:

    参见链接博文。


    参考链接:HDU2098 分拆素数和


    AC的C++程序如下:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    const int N = 1000;
    int prime[N+1];
    
    // Eratosthenes筛选法
    void sieveofe(int p[], int n)
    {
        int i, j;
    
        p[0] = 0;
        p[1] = 0;
        p[2] = 1;
    
        // 初始化
        for(i=3; i<n; i++) {
            p[i++] = 1;
            p[i] = 0;
        }
        int max = sqrt(n);
        for(i=3; i<=max; i++){
            if(p[i]) {
                for(j=i+i; j<=n; j+=i)    //进行筛选
                    p[j]=0;
            }
        }
    }
    
    int main()
    {
        int n, sum, count;
    
        sieveofe(prime, N);
    
        cin >> n;
        while(n--) {
            cin >> sum;
    
            count = 0;
            for(int i=2; i<=sum/2; i++) {
                if(prime[i] && prime[sum-i])
                    count++;
            }
    
            cout << count << endl;
        }
    
        return 0;
    }




  • 相关阅读:
    (十五)、常见的几种RuntimeException
    (十四)、泛型中extends和super的区别
    (十三)、Java泛型
    (十二)、构造方法、静态属性和静态方法的使用要点
    (十一)、final,finally,finalize的区别
    (十)、java内部类与内部类的闭包和回调
    (九)、线程sleep和wait的区别
    (八)、java中==和equals和hashCode的区别
    sketch中做outline icon的制作技巧
    sketch Measure的安装及使用
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563862.html
Copyright © 2020-2023  润新知