当前位置:实例文章 » 其他实例» [文章]计数质数,给定整数 n ,返回 所有小于非负整数 n 的质数的数量 。

计数质数,给定整数 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)。

相关标签:
其他信息

其他资源

Top