题目的链接在这里:https://leetcode-cn.com/problems/count-primes/
题目大意
统计所有小于非负整数 n 的质数的数量。一、示意图
二、解题思路
超时的代码。。。
代码如下:
class Solution {
public int countPrimes(int n) {
//小于n的质数的数目
int count=0;
if(n<=2)
return 0;
for(int i=2;i<n;i++){
if(isZhi(i))
count++;
}
return count;
}
//那就需要一个写一个方法来判断这个数是不是质数
boolean isZhi(int x){
//质数的定义 首先他要大于一 然后 是除了1和自身,其他的值都除不尽 一旦有除尽的 那就不是质数
if(x<=1)
return false;
if(x==2||x==3)
return true;
for(int i=2;i<=Math.sqrt(x);i++){
if(x%i==0)
return false;
}
//这样子都不能找到的话
return true;
}
}
埃氏筛法
代码如下:
class Solution {
public int countPrimes(int n) {
//写一个布尔型的数组 然后默认全是true
boolean isPrime[] = new boolean[n + 1];
for (int i = 0; i <= n; i++)
isPrime[i] = true;
//先进行边界判断
if (n <= 2)
return 0;
//然后就需要开始遍历了
int count = 0;
for (int i = 2; i < n; i++) {
if (isPrime[i]) {
count++;
//然后就把他的倍数都标注为false
for (int j = 2; j * i < n; j++) {
isPrime[j*i] = false;
}
}
}
return count;
}
}