开门见山
什么是素数?
除1和它本身外无其他因数的数就称为素数(或质数)。
相对应的,除1和它本身外还有其他因数的数就称为合数。
需要注意的是:1既不是素数,也不是合数。
那么今天,就让我来完完整整的梳理一下所有的质数筛法。
1.判断一个数是否为素数:
没有利用任何技巧去修饰它,最简洁的码风,最朴素的pd。
当然,与之相对应的,它的速度也不是一般的慢。
2.判断一个数是否为素数(进阶版):
可能相比于第一种pd方式,它已经足够奢华了(指使用了sqrt),速度也是提升了许多。
【常用】
3.利用特判及for循环特性进行pd:
我只能看到:【i=-~i】质变成为【i+=6】。光凭这一点,它的速度就已经碾压前两个了。
4.埃氏筛:
要记住,isPrime数组类型一定要是布尔型,不信的话,你可以用整型试一试。
我个人并不常用。
5.欧拉筛:
break语句使得整个程序的时间复杂度稳定在线性。如果遇到一些对时间复杂度要求很高的令人作呕的题目(劝出题人善良),那还是用这个筛法比较合适吧(个人观点)。
好了,以上就是我梳理的内容了,肯定不全,毕竟我所写的都是适用于大众的算法,某些追求极致复杂度的算法,我就不一一梳理了(绝对不是因为想偷懒)。
See you again.