素数个数统计
统计 n 以内的素数个数。
素数:只能被 1 和自身整除的自然数,0、1 除外
例如:
输入:100,输出:25
暴力算法:
public static int bf(int n) {
int count = 0;
for (int i = 2; i < n; i++) {
count += isPrime(i) ? 1 : 0;
}
return count;
}
private static boolean isPrime(int x) {
// for (int i = 2; i < x; i++) {
// for (int i = 2; i <= x / 2; i++) {
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
埃筛法:
public static int eratosthenes(int n) {
boolean[] isPrime = new boolean[n]; // false 代表素数,true 代表合数
int count = 0;
for (int i = 2; i < n; i++) {
if (!isPrime[i]) {
count++;
// for (int j = 2 * i; j < n; j += i) { // j 是合数的标记位
for (int j = i * i; j < n; j += i) { // j 是合数的标记位
isPrime[j] = true;
}
}
}
return count;
}