用java请统计出 n 以内所有的素 个数。 输入格式: 请给出最大整数以内的一个数字 n 。 输出格式: 输出 n 以内素数的个数。
时间: 2024-09-21 16:07:23 浏览: 70
java代码-使用java解决求正整数n以内的所有质数个数并给出计算时间的源代码
在 Java 中,统计 n 以内素数的个数可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes),这是一种用于寻找一定范围内所有质数的经典算法。下面是一个简单的步骤:
1. 创建一个 boolean 数组 `isPrime`,长度为 n+1,并将所有元素初始化为 true。数组下标表示数字,true 表示该位置的数字可能是素数。
2. 遍历数组,从第一个非质数(如 0 和 1)开始,将它的倍数标记为合数。例如,从 2 开始,将 4、6、8... 等都标记为合数。
3. 当遍历到 sqrt(n) 时停止,因为之后的因数已经被前面处理过了(如果它们不是平方数的话)。
4. 统计 `isPrime` 数组中值为 true 的元素个数,即为 n 以内的素数个数。
以下是对应的 Java 代码实现:
```java
public int countPrimes(int n) {
if (n <= 1) return 0; // 质数定义排除 0 和 1
boolean[] isPrime = new boolean[n + 1];
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
int primeCount = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
primeCount++;
}
}
return primeCount;
}
```
阅读全文