`
ZangXT
  • 浏览: 118305 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

小算法:求素数包的个数

阅读更多

题目:有一个数组,假设是{2,3}。。那么他的子集数包括{2}{3}{2,3},这个称为子包。每个子包的数据和是235。它们都是素数,那就叫素数包。现在设计个程序,入口是数组,出口是数字(素数包的个数)。

分析:这里面涉及到2个知识点,一个是求所有子集,一个是求素数。其实就是将两个小知识点融合了一下。

    所有子集数可以用二进制组合的方式来求。比如求一个集合{1,2,3}的所有子集,如果一个元素在子集中出现,我们记为1,否则记为0。则{1,2,3}的所有子集可以表示为:

十进制数          二进制数            子集

0            =>   0 0 0              =>   {}

1            =>   0 0 1              =>   {3}

2            =>   0 1 0              =>   {2}

3            =>   0 1 1              =>   {2,3}

4            =>   1 0 0              =>   {3}

5            =>   1 0 1              =>   {1,3}

6            =>   1 1 0              =>   {1,2}

7            =>   1 1 1              =>   {1,2,3}

正好23次方个。按照要求,我们将空集去掉。

得到了子集,求和就轻而易举了。

 

    求素数有很多方法,如果是笔试或面试时遇到,可能最简单的是最有效的。

    程序代码:

public class Test {

    public static void main(String[] args) {
        int[] array = {2, 3, 4, 5, 6};
        System.out.println(test(array));
        System.out.println();
        array = new int[]{2, 3};
        System.out.println(test(array));
    }

    public static int test(int[] array) {
        int result = 0;
        int limit = (int) Math.pow(2, array.length);
        for (int i = 1; i < limit; i++) {
            int sum = 0;
            for (int j = 0; j < array.length; j++) {
                int num = i >> j;
                sum += (array[j] * (num & 1));
            }
            if (checkPrim(sum)) {
                result++;
            }
        }
        return result;
    }

    public static boolean checkPrim(int number) {
        for (int i = 2; i * i <= number; i++) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }
}

  

分享到:
评论
3 楼 ZangXT 2009-10-15  
hunter4java 写道
有一个数组,假设是{2,3}。。那么他的子集数包括{2}{3}{2,3},这个称为子包。每个子包的数据和是2,3,5。它们都是素数,那就叫素数包。

不是要求每个子集的和是素数才是素数包吗? 那你怎么只求了一次全部和是素数就判定该子集为素数呢?

比如 3,4,6 你计算出来却是素数包!!!
这个明显不是素数包吧。(应该还要对这个子集包,判断它的所有子集是否是素数,比如4和6就明显不是素数。)


没要求算元素,就是看和是否为素数,3,4,6和为13,当然是素数。

“每个子包的数据和是2,3,5。它们(前面说的和)都是素数,那就叫素数包。”

2 楼 hunter4java 2009-10-15  
hunter4java 写道
有一个数组,假设是{2,3}。。那么他的子集数包括{2}{3}{2,3},这个称为子包。每个子包的数据和是2,3,5。它们都是素数,那就叫素数包。

不是要求每个子集的和是素数才是素数包吗? 那你怎么只求了一次全部和是素数就判定该子集为素数呢?

比如 3,4,6 你计算出来却是素数包!!!
这个明显不是素数包吧。(应该还要对这个子集包,判断它的所有子集是否是素数,比如4和6就明显不是素数。)



说详细一点: 比如 {3,4,6} 你计算出来却是素数包!!!
你只判断了他的最大子集{3,4,6}的和是素数,其他所有子集,如{3},{4},{6},{3,4}等等却没有做判断。

1 楼 hunter4java 2009-10-15  
有一个数组,假设是{2,3}。。那么他的子集数包括{2}{3}{2,3},这个称为子包。每个子包的数据和是2,3,5。它们都是素数,那就叫素数包。

不是要求每个子集的和是素数才是素数包吗? 那你怎么只求了一次全部和是素数就判定该子集为素数呢?

比如 3,4,6 你计算出来却是素数包!!!
这个明显不是素数包吧。(应该还要对这个子集包,判断它的所有子集是否是素数,比如4和6就明显不是素数。)

相关推荐

    第二次作业:求100以内的素数_素数_

    在编程领域,素数是指大于1且只有两个正因数(1和...总的来说,求解素数问题展示了基础的编程思维和算法知识,是学习C++或其他编程语言时的重要练习。通过理解和实践这类问题,我们可以提升逻辑思维能力和编程技能。

    1亿以内的质数(共5761455个数).txt_1亿以内素数的个数

    **质数**(或称为素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。质数是数论中的基本概念之一,在密码学、计算机科学以及其他数学领域都有着广泛的应用。 #### 二、1亿以内质数的数量 根据...

    统计给定整数M和N区间内素数的个数并对它们求和-C语言代码

    在本项目中,我们主要探讨的是使用C语言来统计给定整数区间M到N(包含M和N)内的素数个数,并计算这些素数的总和。素数是大于1且仅能被1和它自身整除的自然数,如2、3、5、7等。这是一个基础的算法问题,对于学习...

    求出1000以内的素数及素数的个数

    在IT领域,尤其是在编程与...综上所述,通过C++语言求解1000以内的所有素数及素数的个数不仅是一次编程实践,更是对算法理解和优化能力的一次锻炼。掌握并灵活运用不同的素数检测方法,对于提升算法设计水平大有裨益。

    素数算法素数代码

    检查p是否能被小素数整除,如3、5、7、11等。 4. 对随机选择的a进行Rabin-Miller测试。 - **优点**: - 快速生成大素数。 - 减少误判的概率。 - 适用于安全领域的加密算法。 以上内容综合了基础素数生成算法、...

    动态规划求素数.

    ### 动态规划求素数 #### 背景与目的 在计算机科学与数学领域,素数(或称质数)是指仅能被1和自身整除的大于1的自然数。对于某些应用场景,例如密码学中的RSA算法,需要快速高效地生成或识别大范围内的素数。传统...

    使用C语言求一组数中素数的个数.docx

    ### 使用C语言求一组数中素数的个数 #### 知识点一:C语言基础 - **数据类型**:在本程序中主要使用了`int`(整型)数据类型来存储数字。 - **数组**:使用数组`nums`来存储一组待检测的整数。 - **函数**:通过...

    RSA公钥加密算法: 用于加密任何消息

    欧拉函数`φ(n)`(通常写作`ø(n)`)是小于`n`且与`n`互素的正整数的个数,对于两个素数`p`和`q`,`φ(n) = (p-1) * (q-1)`。加密指数`e`选取满足`1 φ(n)`且`gcd(e, φ(n)) = 1`的数,这意味着`e`和`φ(n)`互质。...

    C# 求某个正整数的素数算法应用程序

    在"求素数的个数"这个文件中,可能包含了实现这个功能的C#代码源文件,我们可以深入研究其具体实现细节,例如如何处理输入验证、优化算法效率等。学习并理解这段代码有助于提升C#编程技能,尤其是对于数值计算和用户...

    判断101-200之间有多少个素数,并输出所有素数。.docx

    最后,当外层循环结束,我们打印出素数的总数`count`,通过`System.out.println("\n 素数的个数:" + count)`实现,换行符`\n`确保新行开始显示总数。 通过这个程序,我们可以得出101到200之间的素数,并计算它们的...

    素数环的c++实现

    素数环,又称为“质数环”,是指一组正整数排列成环状,其中任意相邻两个数之和都是一个质数。这个问题源于数论中的组合构造问题,它要求找到这样的一个环,使得环上的每个元素都是正整数,并且满足特定的条件。在给...

    算法-素数回文数的个数(信息学奥赛一本通-T1408).rar

    标题中的“素数回文数的...综上所述,解答“算法-素数回文数的个数”问题需要对素数、回文数的性质有深刻理解,并能设计出高效的算法来寻找它们。这不仅锻炼了数学思维,也提升了编程能力,是信息学奥赛中的典型挑战。

    用asp.net写的一段简单代码 求任意区间的素数

    求解素数的算法通常包括质因数分解或简单的遍历检查。 在ASP.NET中,我们可以使用C#或VB.NET作为后端编程语言来实现这个功能。以下是一个简单的C#示例,展示如何在后台生成指定区间的素数: ```csharp public List...

    算法心得:高效算法的奥秘(原书第2版).[美]Henry S.Warren,Jr(带详细书签).pdf

    本书介绍了构建更优雅、更有效的软件的更省时技术、算法和技巧。这些方法都非常实用,而且很有趣,有时候会让人觉得意想不到,就像在解好玩的谜题一样。相信任何想要得到提高的程序员都能从本书中受益匪浅。 由在IBM...

    Java求质数的几种常用算法分析

    "Java求质数的几种常用算法分析" 本文主要介绍了Java中求质数的几种常用算法,并结合实例形式分析了三种比较常见的求质数算法原理及相关实现技巧。 一、根据质数的定义求质数 质数的定义是:只能被1或者自身整除...

    LabView 计算整数N内所有的素数

    判断一个数是否为素数是计算机科学中的基础算法之一。以下是一些关于这个主题的重要知识点: 1. **素数定义**:理解素数的概念是编程求解的基础。素数不包括1和0,且大于1的自然数如果只有两个正因数1和本身,那么...

    C语言趣味算法

    5. 阶乘尾数零的个数:通过因式分解质数的方式确定一个数阶乘后末尾零的个数,常用于优化计算大数阶乘的复杂度。 6. 杨辉三角形:一个经典的数字排列图形,通过递归或者迭代算法生成,是组合数学中的一个重要概念。...

    素数回文数

    标题:“素数回文数”描述了在C语言编程中一个经典的代码实例,该实例用于寻找既是素数又是回文数的整数。在计算机科学领域,尤其是算法和数据结构的学习过程中,这样的代码示例非常常见,对于理解基础的循环、条件...

    单片机常用的14个C语言算法,看过的都成了大神!

    3. 判断素数的算法:素数判断是另一个常见的算法问题。判断素数通常涉及到对特定数值进行分解尝试,看是否能被小于它的数整除。优化的素数判断算法可以结合数学中平方根的概念,减少不必要的迭代。 4. 验证哥德巴赫...

    java语言实现求素数的原根

    在Java语言中实现求素数的原根,我们需要以下步骤: 1. **素数判断**:首先需要一个函数来判断输入的数是否为素数。可以采用试除法,从2到这个数的平方根,如果发现有任何能整除的数,那么这个数不是素数。如果没有...

Global site tag (gtag.js) - Google Analytics