问题描述如下:
“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
分享到:
相关推荐
C语言程序设计-求小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数.c
求小于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数组中,该函数返回所求出素数的个数
求小于m的最大10个素数。 求小于m的最大10个素数.docx
求素数问题。埃拉托色尼筛法(Sieve of Eratosthenes)是一种用来求所有小于N的素数的方法。从建立一个整数2~N的表着手,寻找i˂的整数,编程实现此算法,并讨论运算时间。
关于素数的求法,判断以及输出,可以用C语言 求小于一个数的全部素数。
求小于1000的最大素数,用C#开发,可以用于查找小于1000的最大素数
小于等于k的素数个数的问题的测试源代码 共测试了解5次, 使用时间单位为毫秒, 个数与时间不成正比。 注:我的机器配置比较差:P4 3.06G/1G ---------------------------------------------------------------------...
求小于m的最大10个素数
c语言,小于N的素数之和,使用函数调用的形式,全是我自己编写的奥
求小于m的最大10个素数
求小于m的最大10个素数
python 求小于m的最大10个素数 教程
求小于m的最大10个素数
显示小于1000000的素数的C++代码,可供初学者参考
素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。 问题: 输入一个整数n,输出1~n中的素数,里有详细解释,有问题也欢迎留言!谢谢支持啦~
很快捷的方法求所有素数,C语言代码,适合初学者使用和学习,大家一起交流
问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计算出这个素数 我们思考: N-1是素数么?N-2是素数吗?… 所以我们就是判断N-K是否为素数: N-K是素数的充分必要条件:N-K不...
生成小素数,2~5(2^10、⋯⋯、2^60)多个范围内小素数列表,得出最小范围值N,并打印出小于N的几个典型的值范围内的小素数。