| 查看: 2526 | 回复: 14 | |||
| 本帖产生 5 个 程序强帖 ,点击这里进行查看 | |||
libralibra至尊木虫 (著名写手)
骠骑将军
|
[交流]
Euler Project Q7. 欧拉工程第七题已有6人参与
|
||
|
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13. What is the 10001st prime number? 列出前6个素数:2,3,5,7,11,13,可看出,第6个素数是13. 第10001个素数是多少? |
» 猜你喜欢
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
孩子确诊有中度注意力缺陷
已经有6人回复
2026博士申请-功能高分子,水凝胶方向
已经有6人回复
论文投稿,期刊推荐
已经有4人回复
硕士和导师闹得不愉快
已经有13人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
同一篇文章,用不同账号投稿对编辑决定是否送审有没有影响?
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
Project Euler 50 欧拉工程 50 题
已经有12人回复
欧拉气固两相流模拟
已经有5人回复
Project Euler 48 欧拉工程 48 题
已经有30人回复
Project Euler 45 欧拉工程 45 题
已经有7人回复
欧拉工程,第二十一题,计算10000以下亲和数的和。
已经有14人回复
Euler Project Q17. 欧拉工程第十七题
已经有4人回复
Euler Project Q13 欧拉工程第十三题
已经有20人回复
Euler Project Q12 欧拉工程第十二题
已经有23人回复
【求助】能不能用欧拉两相模型模拟水波纹或者沙波纹
已经有9人回复
【求助】关于欧拉-拉格朗日方程(Euler-Lagrange equation)【已解决】
已经有11人回复

libralibra
至尊木虫 (著名写手)
骠骑将军
- 程序强帖: 40
- 应助: 817 (博后)
- 金币: 12914.1
- 红花: 64
- 帖子: 2238
- 在线: 287.3小时
- 虫号: 696514
- 注册: 2009-02-05
- 专业: 计算机软件

2楼2011-05-14 01:13:57
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
3楼2011-05-14 08:42:12
微尘、梦想
木虫 (知名作家)
- 程序强帖: 6
- 应助: 2 (幼儿园)
- 贵宾: 0.353
- 金币: 4757.9
- 散金: 3089
- 红花: 31
- 沙发: 247
- 帖子: 8788
- 在线: 1125小时
- 虫号: 1203290
- 注册: 2011-02-14
- 专业: 制造系统与自动化

4楼2011-05-14 10:35:02

5楼2011-05-14 10:46:35
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
6楼2011-05-14 13:01:05
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
7楼2011-05-14 13:54:14
★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流! 2011-05-14 19:57:06
余泽成(程序强帖+1): 2011-05-15 19:10:42
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 鼓励交流! 2011-05-14 19:57:06
余泽成(程序强帖+1): 2011-05-15 19:10:42
|
分段筛选试试~ 整段筛选的话,每次都需要测试相同的素数,就是说,每次都得从2,3开始测试。就算不需要从2开始测试,3,5,7这样的测试是免不了浪费的。 可以观察函数x*y=z可以发现,以x=y=sqrt(z)为分界线,要么x 比如说100,sqrt(100)=10,以10为分界线,如果按照整段筛选的策略,那1~100以内的每个数都需要被遍历,每个数都至少要测试sqrt(n)个素数,排在前面的2,3,5这样的素数大约都需要被重复测试100遍,但是如果以50分段,第一遍,一次性找出前面50个素数,重复测试的次数还是50;第二遍的时候性能开始体现,2只需要测试25遍,3只需要测试16遍,5只需要测试10遍,相比100遍来说,还是好一些。 |

8楼2011-05-14 14:57:29
holmescn
金虫 (正式写手)
- 程序强帖: 37
- 应助: 1 (幼儿园)
- 金币: 1918.8
- 散金: 275
- 红花: 1
- 帖子: 699
- 在线: 102.6小时
- 虫号: 913482
- 注册: 2009-11-26
- 性别: GG
- 专业: 凝聚态物性 II :电子结构
★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 谢谢参与交流! 2011-05-15 19:10:58
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 谢谢参与交流! 2011-05-15 19:10:58
|
这里的性能损失我想主要是来自一些重复(冗余)计算,比如不用计算每个数的余数,只要有一个能整除,那后面的就不用算了。这一点我不知道matlab是不是给优化掉了。 至于分段,可能是我没有太理解你的意思,每个数在测试是不是质数的时候,都需要用前面N个已经知道的质数去除一下,好像没有什么例外的情况。无论是不是分段。当然,我已经减少了测试的次数,那就是idx那行,只有小于sqrt(m)的质数才会去测试。当然那个find也是一个性能损失。不过,因为我没有做profile,也不改下定论。 |
9楼2011-05-14 18:03:17
★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2, 程序强帖+1): 分析的很详细啊! 2011-05-15 19:13:06
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2, 程序强帖+1): 分析的很详细啊! 2011-05-15 19:13:06
|
对于整数n而言,减少测试的次数对于整个过程来说非常重要,这个有两个方面,一个是减少测试数据,可以通过sqrt来获得O(lgn)的性能,但是对于每个测试数据而言,前面也还有至多lg(lgn)个数据需要测试,优化测试数据对性能提高是显而易见的。 即使sqrt减少了测试数据,对于相当大的整数而言,比如10^20,sqrt产生的还是10^10个测试数据,即使剔除了偶数,整体规模依然庞大,如果每个数据都去除一遍3,5,7之类的,这些冗余运算自然需要想办法剔除。剔除的最简单办法就是自底向上,把每个非素数全部剔除,像这样: 2,每次递增2,剔除每个偶数,规模减小到1/2 3,每次递增3,剔除每个3的倍数,在2的基础上减少大约1/3 5,每次递增5,剔除每个5的倍数,在3的基础上减少大约1/5 7,每次递增7,剔除每个7的倍数,在5的基础上减少大约1/7 剩下的就全部是素数。这样剔除使数组的规模减少得非常快,而且不断会有新增的素数出现,第一遍需要n/2,第二遍需要大约n/6次,第三遍需要大约n/30次,而所有的测试数据都是素数,理论上说是比那个算法要快,而且没有上面说的冗余,只是实际上实现起来非常困难,需要专门的数据结构支撑,满足两个条件:第一,常数时间的索引元素,第二,常数时间的删除元素。这样的数据结构似乎需要组合链表和数组才能实现。 呃,上面的想法当然有问题,列表不可能是无限长的,所以需要决定一个步长来分段,分段产生的素数用于下一段的计算,但是通常也无法知道下一个素数出现的位置,所以实际上只能估计。由于分段之后的每一个数都是必须要测试的,所以如何分段不是什么性能损失,问题在于每次分段的时候需要初始化段内的数表,这个是个耗时的操作,如何分段取决于问题的实际规模。 |

10楼2011-05-14 19:13:45













回复此楼