📌  相关文章
📜  国际空间研究组织 | ISRO CS 2017 – 5 月 |问题 18(1)

📅  最后修改于: 2023-12-03 15:23:04.304000             🧑  作者: Mango

ISRO CS 2017 – 5 月 | 问题 18

该题要求编写一个 Python 程序,根据输入的数字 n,输出从 0 到 n 的所有素数。

思路

一个数是素数,当且仅当它只能被 1 和它自身整除。因此,我们可以通过试除法找出所有素数,具体步骤如下:

  1. 首先将 2 到 n-1 的所有数存储在列表中(由于 0, 1 不是素数,因此不需要考虑)
  2. 从 2 开始依次判断列表中的每个数是否为素数
  3. 如果一个数是素数,将它的倍数从列表中移除
  4. 重复步骤 2 和 3,直到发现所有素数
代码
def find_primes(n: int) -> List[int]:
    """
    找出从 0 到 n 的所有素数

    Args:
        n: 需要查找的范围

    Returns:
        List[int]: 从 0 到 n 的所有素数
    """
    primes = list(range(2, n+1))  # 将 2 到 n-1 存储在列表中
    i = 0
    while i < len(primes):
        num = primes[i]
        i += 1
        for j in range(i, len(primes)):
            if primes[j] % num == 0:
                primes.pop(j)
    return primes
测试样例
assert find_primes(10) == [2, 3, 5, 7]
assert find_primes(20) == [2, 3, 5, 7, 11, 13, 17, 19]
结论

通过以上程序及测试,我们可以得出从 0 到给定数字 n 的所有素数。