素数有哪些100以内,素数有哪些100以内有多少个

首页 > 教育 > 作者:YD1662024-05-02 18:16:29

原理很巧妙,也仅仅是把代码的i < n变成了i * i <= n而已,但是优化却是极其高的。可能你会注意到,在上一份代码里面,我定义的n为int类型,而后面一份代码,我却定义成了long long,这是因为在1s内,上一份代码能判断出来的数量级为1e8,而后面一份代码判断出来的数量级却几乎可以达到1e16。而原因仅仅是因为a * b = c的话一旦a是c的约数,那么b也是,如果a不是,那么b也不是。

素数有哪些100以内,素数有哪些100以内有多少个(5)

这里要插播一条诚挚的感谢,昨天的文章里出现了一个巨大的错误,被一个小可爱指出来了,如下:

素数有哪些100以内,素数有哪些100以内有多少个(6)

确实我昨天的代码错了

犯这样的错误让我心痛不已!!!

以后一定痛定思痛,好好学习天天向上!

6倍筛:一个神奇的规律

个人觉得这个方法,是一个神奇的发现。

来看一个关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等。

这个规律的正确性我们这里就不证明了,大家有兴趣可以去查查资料,或者等待大佬评论区解答。

素数有哪些100以内,素数有哪些100以内有多少个(7)

好,那么知道这个规律,此时判断质数就可以6个为单元快进,即将前面的方法循环中i 步长加大为6,加快判断速度,原因是,假如要判定的数为n,则n必定是6x-1或6x 1的形式,对于循环中6i-1,6i,6i 1,6i 2,6i 3,6i 4,其中如果n能被6i,6i 2,6i 4整除,则n至少得是一个偶数,但是6x-1或6x 1的形式明显是一个奇数,故不成立;另外,如果n能被6i 3整除,则n至少能被3整除,但是6x能被3整除,故6x-1或6x 1(即n)不可能被3整除,故不成立。

综上,循环中只需要考虑6i-1和6i 1的情况,即循环的步长可以定为6,每次判断循环变量k和k 2的情况即可,理论上讲这种方法整体速度应该会是朴素判断素数法的3倍。代码如下:

素数有哪些100以内,素数有哪些100以内有多少个(8)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.