Description:
Count the number of prime numbers less than a non-negative number, n.
厄拉多塞筛法(Sieve of Eeatosthese):
从第一个质数开始 把所有他的倍数都去掉, 那么下一个没有被去掉的肯定是质数, 依次循环到sqrt(n)
从第一个质数开始 把所有他的倍数都去掉, 那么下一个没有被去掉的肯定是质数, 依次循环到sqrt(n)
public class Solution {
public int countPrimes(int n) {
if(n <= 2) {
return 0;
}
boolean[] map = new boolean[n];
for (int i = 2; i <= Math.sqrt(n); i++) {
//如果n=100, 那么只需要递加到10就可以, 之后的11* 11 > 100, 而11*(2到10)都已经在2到10时候剪去过了
if (map[i] == false) {
for (int j = i + i; j < n; j += i) {
map[j] = true;
}
}
}
int count = 0;
for (int i = 2; i < n; i++) {
if (map[i] == false) {
count++;
}
}
return count;
}
}

没有评论:
发表评论