【发布时间】:2018-10-14 15:29:37
【问题描述】:
我人生中第一次从零开始学习编程。我正在学习 Python 语言。我的第一个困难任务是编写检查数字是否为质数的算法。
脚本应该以非常简单的方式工作。你输入:
is_prime(29)
你应该得到这样的输出:
数字 29 是质数。
或
数字 29 不是质数。
我没有在互联网上查看任何解决方案。我自己做的。我的假设如下:
- 从学校我记得素数只能被 1 和自身整除
- '0' 和 '1' 不是质数
所以我编写了检查给定数字是否除以从 2 到 (number-1) 的所有数字的代码。例如,如果给定值为“6”,则脚本首先检查 6 是否除以 2。如果为真,则表示该数字不是质数。如果 6 不会除以 2,则脚本会检查 6 是否除以 3。如果是,则意味着该数字不是质数。如果是“7”号,脚本会检查 7/2,然后是 7/3,然后是 7/4,然后是 7/5,然后是 7/6。
代码是这样的:
def is_prime(number):
if number == 0 or number == 1:
print(f"The number {number} is NOT the prime number.")
elif number == 2:
print(f"The number {number} is the prime number.")
else:
for i in range(2, number):
if number % i == 0:
check = "is NOT"
break
else:
check = "is"
print(f"The number {number} {check} the prime number.")
但后来,我实际上意识到了三件事:
- 如果这个数除以2,肯定不是素数
- 如果数字不被2整除,则可以被3或5整除。
- 如果这个数不被2整除,不被3整除,也不被5整除,这意味着这个数是质数。此规则的唯一例外是这三个数字 2,3 和 5。
就是这样。于是我写了如下代码
def is_prime(number):
if number > 1:
if (number %2 == 0 and number != 2) or (number %3 == 0 and number != 3 ) or(number %5 == 0 and number != 5):
print(f"The number {number} is NOT the prime number. ")
else:
print(f"The number {number} is the prime number. ")
else:
print(f"The number {number} is NOT the prime number. ")
我认为这两种解决方案都可以。 如有错误请指正 但是我想问一下,从编程的角度来看,哪种方案更好?
【问题讨论】:
-
如果
number % 7 == 0怎么办?另外,根据你的第二个函数,179_426_549 是素数吗? -
@ForceBru 是对的!您的代码会将 49 视为素数,而实际上并非如此。
-
另外,请查看this。在现代 GPU 上,最大的已知素数可以在 34 小时 内验证为素数。相反,您的代码将闪电般快速,但给出的结果同样不正确。如果您为素数检查创建了如此快速的算法,那么您肯定会获得某种奖励。
-
根据第二个代码,179 是素数,426 不是素数,549 不是素数。我现在已经检查过了。我认为这是正确的。它不是?但是你说 49 是素数是对的,这当然是错误的。
标签: python