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

问题10-求小于2000000的质数之和

 
阅读更多

问题描述如下:
        “10以下的质数之和为2+3+5+7=17,求2000000以下的质数之和?”

    此问题相对比较简单,在前面的问题中已经给出质数判断的方法,具体代码如下:

 

/**
	 * 判断是否是素数
	 * 
	 * @param n
	 * @return
	 */
	public static boolean isPrimeNumber(int n) {
		if (n < 2) {
			return false;
		}
		double max = Math.sqrt(n);
		for (int i = 2; i <= max; i++) {
			if (n % i == 0) {
				return false;

			}
		}
		return true;
	}

 
    问题的实现方法如下:

 

/**
     * 小于n的质数之和
     * @param n
     * @return
     */
    private static Long getPrimeNumberSum(int n) {
        int i = 2;
        Long sum = 2L;
        while (i <= n) {
            if (AlgorithmUtil.isPrimeNumber(++i)) {
                sum += i;
            }
        }
        return sum;
    }

 
    即可得到答案142913828922

    稍稍优化一下,

 

/**
	 * 小于n的质数之和
	 * 
	 * @param n
	 * @return
	 */
	private static Long getPrimeNumberSum(int n) {
		int i = 5;
		Long sum = 5L;//由于2,3都是质数,初始值为5
		while (i <= n) {
			if (AlgorithmUtil.isPrimeNumber(i += 2)) {//质数 不能被2整除
				sum += i;
			}
			if (i <= n && AlgorithmUtil.isPrimeNumber(i += 4)) {//不能被3整除
				sum += i;
			}
		}
		return sum;
	}
 

    还可以通过埃拉托斯特尼筛法(http://zh.wikipedia.org/zh-cn/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95)来求质数之和。

    请不吝赐教。
    @anthor ClumsyBirdZ

分享到:
评论

相关推荐

    vb源代码-求10-50素数和

    在这个"vb源代码-求10-50素数和"的例子中,我们主要讨论的是如何使用VB来编写程序计算10到50之间所有素数的和。 首先,我们需要了解素数的概念。素数是指大于1且除了1和它自身以外没有其他正因数的自然数,如2、3...

    C语言程序设计-求小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数.c

    C语言程序设计-求小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数.c

    求小于m的最大10个素数.docx

    标题中的“求小于m的最大10个素数”是一个经典的编程问题,主要涉及数学和算法的知识,特别是素数检测和数组处理。在这个问题中,我们需要找到小于给定整数m的所有素数,并输出其中最大的10个。描述部分进一步确认了...

    求小于m的最大10个素数.txt

    求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的最大10个素数求小于m的...

    C语言程序设计-功能求大于lim(lim小于100的整数)并且小于100的所有素数并放在aa数组中,该函数返回所求出素数的个数

    C语言程序设计-求大于lim(lim小于100的整数)并且小于100的所有素数并放在aa数组中,该函数返回所求出素数的个数

    算法课设--求素数问题

    求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。

    C语言 求小于一个数的全部素数

    关于素数的求法,判断以及输出,可以用C语言 求小于一个数的全部素数。

    数据结构中的图问题------素数环

    解决素数环问题不仅可以锻炼编程技巧,还能够加深对素数性质和图论的理解。在实际应用中,这种问题可能出现在密码学、网络路由优化或其他需要寻找特定序列或结构的场景中。通过学习和掌握这类问题的解法,IT专业人士...

    C语言求100到200之间的素数

    在计算机科学领域,素数检测是常见的算法问题之一。本篇代码示例通过C语言实现了一个简单的程序,该程序能够找出100至200之间的所有素数。对于初学者而言,这不仅是一个很好的编程练习,还能帮助他们理解循环、条件...

    求小于1000的最大素数

    求小于1000的最大素数,用C#开发,可以用于查找小于1000的最大素数

    C语言程序设计-求给定正整数n以内的素数之积;(n&lt;28).c

    C语言程序设计-求给定正整数n以内的素数之积;(n).c

    小于等于k的素数个数的问题的测试源代码

    小于等于k的素数个数的问题的测试源代码 共测试了解5次, 使用时间单位为毫秒, 个数与时间不成正比。 注:我的机器配置比较差:P4 3.06G/1G ---------------------------------------------------------------------...

    64位以内Rabin-Miller 强伪素数测试和Pollard rho 因数分解算法的实现

    它们在有限的计算资源下提供了相对高效的方式来处理大整数的素性测试和因数分解问题,对于密码学和其他依赖于素数性质的领域有着深远的影响。在实现这些算法时,开发者需要考虑数据类型、溢出控制、效率优化等问题,...

    求小于m的10个素数 python

    在这个问题中,我们关注的是找到小于给定整数m的最大10个素数。这涉及到两个主要知识点:如何判断一个数是否为素数以及如何有效地找出这些素数。 首先,我们来看`is_prime`函数,它的作用是检查一个数n是否为素数。...

    求小于m的最大10个素数

    这可能取决于问题的具体要求,比如可以设定为1到N/2,或者1到N-10。然后,再次遍历素数列表,打印出在这个范围内的素数。 在C语言中,这可能的代码实现如下: ```c #include #include bool is_prime(int n) { ...

    java求小于m的10个素数.docx

    Java编程语言提供了强大的工具来处理数学问题,如找到小于给定数m的最大的10个素数。在这个问题中,我们可以通过实现两个关键方法来解决:`isPrime()`用于检查一个数字是否为素数,而`findPrimeNumbers()`则负责找到...

    C++ 实现求小于n的最大素数的实例

    C++ 实现求小于n的最大素数的实例 C++ 实现求小于n的最大素数的实例是指使用 C++ 语言编写的程序,用于找出小于给定数字 n 的最大素数。该实例主要介绍了 C++ 实现求小于n的最大素数的相关资料,需要的朋友可以参考...

    小于N的素数

    c语言,小于N的素数之和,使用函数调用的形式,全是我自己编写的奥

    显示小于1000000的素数

    在编程领域,素数是指一个大于1且只有两个正因子(1和自身)的自然数。素数在数学和计算机科学中有着广泛的应用,比如在密码学中的RSA算法。本篇我们将深入探讨如何使用C++语言来显示小于1000000的所有素数。 C++是...

Global site tag (gtag.js) - Google Analytics