非負の整数n未満のすべての素数の数を数えます。
例1:
入力:n = 10
出力:4
説明:10未満の素数が4つあり、それらは2、3、5、7です。
例2:
入力:n = 0
出力:0
例3:
入力:n = 1
出力:0
素数は、素数とも呼ばれ、1とその数自体を除いて、他の自然数で割り切れない1より大きい自然数の数を指します。---ウィキペディア
ここでは、2から始まり、sqrt(n)までトラバースするフィルタリング方法が使用されます。これは、後続の操作が繰り返し操作であるためです。
要素iの位置がtrueの場合(falseは、素数ではなく削除されたことを意味します)、その位置にある要素iが素数であり、各削除がi 2から始まることを意味します(前の番号のため) i 2が削除されました)、すべてのi位置を削除します
最後に、真の数を数えます
class Solution {
public int countPrimes(int n) {
if(n<2){
return 0;
}
int sum=0;
boolean[] b = new boolean[n];
Arrays.fill(b,true);
for(int i=2;i*i<n;i++){
if(b[i]){
for(int j=i*i;j<n;j+=i){
b[j]=false;
}
}
}
for(int i=2;i<n;i++){
if(b[i]){
sum++;
}
}
return sum;
}
}