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; } }
没有评论:
发表评论