fucking-algorithm icon indicating copy to clipboard operation
fucking-algorithm copied to clipboard

如何高效寻找素数 :: labuladong的算法小抄

Open utterances-bot opened this issue 2 years ago • 6 comments

文章链接点这里:如何高效寻找素数

评论礼仪 见这里,违者直接拉黑。

utterances-bot avatar Jan 21 '22 07:01 utterances-bot

米青女少 !

deepbreath373 avatar Jan 26 '22 09:01 deepbreath373

只更新每个合数最小的素数可以优化到O(n)

Jebearssica avatar Feb 23 '22 02:02 Jebearssica

比如 n = 25,i = 4 时算法会标记 4 × 2 = 8,4 × 3 = 12 等等数字,但是这两个数字已经被 i = 2 和 i = 3 的 2 × 4 和 3 × 4 标记了。 @labuladong 东哥,这里i=4, 4 = 2 x 2, 所以在i=2时4已经被标记为false,所以不会进入内层循环标记吧

Maschinist-LZY avatar Apr 15 '22 16:04 Maschinist-LZY

@Maschinist-LZY 嗯,你说得对,我大意了。把 i = 4 改成 i = 5 就没问题了,已修正~

labuladong avatar Apr 18 '22 03:04 labuladong

打卡,感谢楼主!

bert82503 avatar Jun 08 '22 08:06 bert82503

“首先,回想刚才判断一个数是否是素数的 isPrime 函数,由于因子的对称性,其中的 for 循环只需要遍历 [2,sqrt(n)] 就够了。这里也是类似的,我们外层的 for 循环也只需要遍历到 sqrt(n)”,没明白是怎么类似的?我个人觉得这里能优化成sqrt(n)的原因是内层循环的j被优化成从i^2开始,所以外层循环才可以被优化成sqrt(n),而不是因为因子对称性

nuo1nuo avatar Aug 07 '22 15:08 nuo1nuo

打卡。妙哉妙哉,排除法!

yonggui-yan avatar Sep 14 '22 14:09 yonggui-yan