说个闲话,算质数的算法,是不是无法多线程并行?

2021-01-13 02:46:59 +08:00
 black11black
如题,质数算法基本是程序员必修课了,这里就不赘述了,起因是一般测试系统的时候,如果要造成 cpu 密集,我个人是习惯写个质数算法来模拟

今天写的时候想,这个东西因为优化时间复杂度的算法,后面的搜索要依赖前面的结果,是不是无法多线程并行啊。所以人类的智慧只能单线程算质数?
2074 次点击
所在节点    问与答
16 条回复
also24
2021-01-13 03:01:06 +08:00
如果是算质数列表的话,应该是可以通过对筛法做一定改造来优化多线程下的表现的。
also24
2021-01-13 03:11:13 +08:00
另,多亏了楼主提到这个素数的事儿,我才突然意识到,经常用到的 Prime95 其实和 GIMPS 有着密切的关联。
black11black
2021-01-13 03:29:43 +08:00
@also24 啥意思,搜索了一下 GIMPS,所以是一个跑分时兼顾云计算素数的软件?
yzbythesea
2021-01-13 03:35:14 +08:00
如果是多线程,可以直接检查这个数是不是质数来求得所有质数。

https://gist.github.com/ydzhou/07b22fc641046ff59585b326a582104e
BrettD
2021-01-13 03:54:23 +08:00
你说的质数算法是什么,是检验一个整数是否是质数,还是什么
dream4ever
2021-01-13 04:32:51 +08:00
跑个题,刚知道 V2EX 可以显示 gist 代码,很棒啊
black11black
2021-01-13 04:55:43 +08:00
@BrettD 寻找 N 以内质数,比如在 10 秒内寻找一百亿以内所有质数,质数一般都说的这个吧。判断单个质数没见过这么出算法题的
black11black
2021-01-13 04:57:12 +08:00
@yzbythesea 这个就是我用的 cpu bound 的很基础的算法,但是实际上这个算法可能比带缓存的版本慢一百倍,让我想到了并行问题
yzbythesea
2021-01-13 05:02:49 +08:00
@black11black 带缓存是什么意思?
BrettD
2021-01-13 05:09:12 +08:00
@black11black 实际工程里面判断一个大整数是不是质数的问题比寻找某个范围内所有质数要常见的多吧……所以我看你说的算质数的第一反应是判断质数。寻找范围内质数感觉像是面试时候问的问题。
BrettD
2021-01-13 05:10:42 +08:00
你的算法“后面依赖前面”是埃拉托色尼筛吗?
zu1k
2021-01-13 06:58:56 +08:00
如果缓存中最大的数是 n,那 n 到 2n 这 n 个数实际上不需要依赖额外补充的缓存内容了,也就是说这部分可以利用已有缓存并行计算,不知道我理解的对不对
thedrwu
2021-01-13 07:51:22 +08:00
N 小的时候可以撸个 miller rabin 并行判断
@black11black #7
baiyi
2021-01-13 07:55:16 +08:00
楼主说的让我想起了学习 Go 并发时看到的一篇文章,里面用的 Sieve of Eratosthenes 实现素数筛。

文章里用图形展示了 goroutine 的并发性: https://divan.dev/posts/go_concurrency_visualize/#concurrent-prime-sieve
black11black
2021-01-13 08:43:07 +08:00
@BrettD 这很基础的问题吧,我觉得不需要解释,而且细节完全是无所谓的问题,不知道你为什么要问这个。算法里实现缓存的办法有很多,比如缓存已判明的质数,比如维护一张全量表等等
BrettD
2021-01-13 09:53:19 +08:00
@black11black 你不说清楚你的算法是什么,别人怎么并行化。要我并行化的话,我就写成四楼那样了,质数判定用快速近似算法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX