首页 > 解决方案 > 不能将 2 定义为素数

问题描述

我正在尝试定义素数,但我的算法无法识别2prime number. 而是返回None。我在 中尝试Google ColabJupiter Notebook结果PyCharm相同。

我的代码:

# V1) Test all divisors from 2 through n-1. (skip 1 and n)
def is_prime_v1(n):
  """ Return 'True' if 'n' is a prime number. False otherwise. """
  if n == 1:
    return False # 1 is not prime

  for d in range(2, n):
    if n % d == 0:
      return False # Is not prime
    return True

# ===== Test Function =====
for n in range(1, 21):
  print(n, is_prime_v1(n))

我的输出:

1 False
2 None
3 True
4 False
5 True
6 False
7 True
8 False
9 True
10 False
11 True
12 False
13 True
14 False
15 True
16 False
17 True
18 False
19 True
20 False

此外,返回有一些错误,比如9is not a prime number.

此代码来自,开始于0:46Python 和素数 || Python 教程 || 学习 Python 编程

标签: pythonpython-3.xmathjupyter-notebookgoogle-colaboratory

解决方案


因为您的程序永远不会进入循环。

for d in range(2, n):
    if n % d == 0:
      return False # Is not prime
    return True

从 2 开始,直到n-1. 此外,您应该以不同的方式缩进。只有在您的程序退出循环后,您才应该return True

for d in range(2, n):
    if n % d == 0:
      return False # Is not prime
return True

但是如果你想优化你的功能,它应该是这样的:

def is_prime_v1(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for d in range(3, round(n**0.5) + 1, 2):
        if n % d == 0:
            return False
    return True

由于您不需要检查数字本身,因此只有平方根。此外,任何偶数都不能是素数(2 除外),因为它可以被 2 整除。
编辑:
我很高兴我的回答有帮助:)


推荐阅读