笨鸟
天道酬勤,思者常新;博观约取,厚积薄发;心如止水,气贯长虹;淡泊明志,宁静致远。
posts - 10, comments - 0, trackbacks - 0, articles - 1
导航
BlogJava
首页
新随笔
联系
聚合
管理
<
2010年11月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的文章
我的评论
我的参与
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
android(2)
eclipse(1)
JVM
一些问题-projecteuler(7)
杂谈(2)
随笔档案
2010年11月 (12)
搜索
最新评论
阅读排行榜
1. 问题7-求第10001个质数(860)
2. Windows下git下载android source(784)
3. 问题6-求1到100的和平方与平方和的差值(557)
4. 问题10-求小于2000000的质数之和(390)
5. 问题9-求毕达哥拉斯三元数组{a,b,c},使得a+b+c=1000,给出a*b*c(341)
评论排行榜
1. 重要(0)
2. 问题11-求给出20*20数组的任何方向四个数相乘的最大值(0)
3. 问题10-求小于2000000的质数之和(0)
4. 问题9-求毕达哥拉斯三元数组{a,b,c},使得a+b+c=1000,给出a*b*c(0)
5. 问题8-对于1000位数值求出连续五位数值的最大乘积(0)
问题10-求小于2000000的质数之和
Posted on 2010-11-23 17:22
ClumsyBird
阅读(390)
评论(0)
编辑
收藏
所属分类:
一些问题-projecteuler
问题描述如下:
“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 ClumsyBird
-----------------------------
博观约取,厚积薄发
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
问题11-求给出20*20数组的任何方向四个数相乘的最大值
问题10-求小于2000000的质数之和
问题9-求毕达哥拉斯三元数组{a,b,c},使得a+b+c=1000,给出a*b*c
问题8-对于1000位数值求出连续五位数值的最大乘积
问题7-求第10001个质数
问题6-求1到100的和平方与平方和的差值
问题5-求能被1到20所整除的最小的数
Powered by:
BlogJava
Copyright © ClumsyBird