Count Primes
描述
Description:
Count the number of prime numbers less than a non-negative number, n.
Credits:Special thanks to @mithmatt for adding this problem and creating all test cases.
题解
func countPrimes(n int) int {
if n < 3 {
return 0
}
// composite:合数,prime 的反义词
isComposite := make([]bool, n)
// 小于 n 的数中,有一半是偶数,除2以外,都不是质数
// 所以,count 的上限是 n / 2
count := n / 2
for i := 3; i*i < n; i += 2 {
if isComposite[i] {
continue
}
// j 是 i 的倍数,所以 j 肯定不是 质数
// 对所有的 j 进行标记
for j := i * i; j < n; j += 2 * i {
if !isComposite[j] {
// j 还没有被别的 i 标记过了
// 修改 count
count--
// 对 j 进行标记
isComposite[j] = true
}
}
}
return count
}