计数质数,给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。
发布人:shili8
发布时间:2025-03-13 00:31
阅读次数:0
**计数质数**
================**问题描述**
------------给定一个整数 `n`, 返回所有小于 `n` 的质数的数量。
**解决方案**
-------------
### 算法思路1. 首先,我们需要定义什么是质数。质数是大于1 的自然数,除了1 和它本身之外,不具有其他正因数。
2. 我们可以使用一个简单的算法来检查一个数字是否为质数:对于每个数字 `i` 从2 到 `n-1`, 检查 `i` 是否能整除 `n-1`。如果 `i` 能整除 `n-1`, 则 `n-1` 不是质数。
3. 我们可以使用一个数组或集合来存储所有小于 `n` 的质数,然后返回该集合的大小。
###代码实现
def countPrimes(n): """ 统计小于 n 的质数数量 Args: n (int): 大于等于2 的整数 Returns: int: 小于 n 的质数数量 """ # 如果 n 小于或等于2, 则返回0 if n <=2: return0 # 初始化一个布尔数组, 表示每个数字是否为质数 is_prime = [True] * n is_prime[0:2] = [False, False] # 从3 开始检查每个数字是否为质数 for i in range(3, int(n **0.5) +1,2): if is_prime[i]: # 如果 i 是质数, 则将其倍数标记为非质数 for j in range(i * i, n,2 * i): is_prime[j] = False # 返回小于 n 的质数数量 return sum(is_prime)
### 示例
print(countPrimes(10)) # 输出:4 (因为2、3、5 和7 是小于10 的质数) print(countPrimes(20)) # 输出:8 (因为2、3、5、7、11、13、17 和19 是小于20 的质数)
### 复杂度分析* 时间复杂度: O(n log log n) (因为我们使用了一个布尔数组来存储每个数字是否为质数, 并且在最坏情况下需要检查每个数字一次)
* 空间复杂度: O(n) (因为我们使用了一个布尔数组来存储每个数字是否为质数)
### 总结本文介绍了一种算法和代码实现来计算小于 n 的质数数量。该算法使用一个布尔数组来存储每个数字是否为质数, 并且在最坏情况下需要检查每个数字一次。该算法的时间复杂度是 O(n log log n), 空间复杂度是 O(n)。