题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/65bb0ecf6ae89a6c78171ca52f6825be.png)
大致思路
- 实现埃拉托斯特尼筛法
- 遍历2-根号n,将2的倍数筛选出去,再把3的倍数筛出去,再把5的倍数筛出去…i的倍数筛出去
- 当i²>=n时跳出循环,剩下的数就是质数。
- 我们使用boolean型来存放,是质数的为1,不是的为0。
代码实现
package com.immunize.leetcode.countPrimes;
public class Solution {
public int countPrimes(int n) {
if (n == 0)
return 0;
boolean[] primeList = new boolean[n];
for (int i = 0; i < n; i++) {
primeList[i] = true;
}
primeList[0] = false;
int count = 0;
int side = (int) Math.sqrt(n);
for (int i = 2; i <= side; i++) {
if (primeList[i - 1]) {
for (int j = i * i; j < n; j = j + i) {
primeList[j - 1] = false;
}
}
}
for (int i = 2; i < n; i++) {
if (primeList[i]) {
count += 1;
}
}
return count;
}
}