4、求质数个数 输入一个正整数 n,统计从 1 到 n 中的质数的个数。
时间: 2025-01-06 17:50:46 浏览: 6
要统计从 1 到 n 中的质数的个数,我们可以使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来高效地解决这个问题。埃拉托斯特尼筛法是一种古老的算法,用于找到所有小于或等于给定数的质数。
以下是算法的步骤:
1. 创建一个布尔数组 `isPrime`,大小为 `n+1`,并将所有元素初始化为 `true`。`isPrime[i]` 表示数字 `i` 是否是质数。
2. 将 `isPrime[0]` 和 `isPrime[1]` 设置为 `false`,因为 0 和 1 不是质数。
3. 从 2 开始遍历数组,对于每个质数 `p`,将其所有的倍数标记为 `false`,因为这些倍数不是质数。
4. 统计 `isPrime` 数组中仍为 `true` 的元素个数,即为质数的个数。
以下是Python代码示例:
```python
def count_primes(n):
if n <= 1:
return 0
is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
for p in range(2, int(n ** 0.5) + 1):
if is_prime[p]:
for multiple in range(p * p, n + 1, p):
is_prime[multiple] = False
return sum(is_prime)
# 示例使用
n = int(input("请输入一个正整数: "))
print(f"从 1 到 {n} 中的质数个数为: {count_primes(n)}")
```
在这个代码中,我们首先检查输入的 `n` 是否小于等于 1,如果是,则直接返回 0,因为 0 和 1 都不是质数。然后,我们初始化布尔数组 `is_prime`,并将所有元素设置为 `true`。接着,我们使用埃拉托斯特尼筛法来标记非质数,最后统计质数的个数。
阅读全文