204. Count Primes
problem description
Count the number of prime numbers less than a non-negative number, n.
Example:
algorithm thought
直接求一个数是不是质数需要O(lgn)时间,遍历查看是否有两数相乘能得到n。这里是求n数中所有的质数,可以从反方向来考虑。得到一个质数之后,直接排除所有他的倍数。排除一个数只要一次计算,但是之后再来计算这个数是不是质数却需要O(lgn)时间。
可以知道,所有偶数肯定不是质数。直接从3开始计算,排除所有3的倍数。注意要从33开始,也就是9开始,而不是3或者是32=6开始。因为6已经在从2开始计算中计算过了。再比如计算5的倍数,不需要计算53=15,因为之前计算3的时候计算过35=15了。
计算3的倍数,首先是9,然后是12,然后是15以此类推,都不是质数,可以排除。但是,这里好像还是有重复计算,12 , 18 等等数字明显都是偶数,可以直接不计算。于是修改计算倍数的代码,9直接加上23,43。
将所有质数加起来。描述的应该不是很清楚,可以仔细看看代码
code
algorithm analysis
这里空间复杂度是O(n),时间复杂度我也不是很会分析,看题目的hint里,分析的时间复杂度是O(n log log n).
Last updated