【发布时间】:2014-05-09 22:59:49
【问题描述】:
如果这是一个重复的问题,我提前道歉 - 我搜索 python 和 modulus 的问题多达 8 页,再加上我相对较少的编码经验,让我有点难以彻底检查看看那里有没有非常相似的东西。
在尝试解决Project Euler 问题时,我编写了一个函数来测试一个数字是否为质数:
import math
def isprime(n):
if n % 1 != 0:
return(False)
else:
for j in range(2, math.ceil(math.sqrt(n)) + 1):
if n % j == 0:
return(False)
else:
return(True)
break
这适用于小数字,但对于绝对不是质数的非常大的数字(例如,我输入isprime(1012321312412431434334545555),该函数给我一个值True)。为什么会这样?
编辑:正如 roippi 所指出的并通过我的进一步调查证实,这个函数实际上不适用于许多较小的奇数合数。我正试图弄清楚为什么现在这不起作用。
【问题讨论】:
-
您的函数认为
15是素数。调查一下,你就有答案了。 -
如果我测试 3 或 4,您的函数也会“中断”。
-
@zmo 这根本不是真的。即使这是真的,编辑也不应该改变代码的基本部分,从而改变语义。
-
@zmo 包含
False的元组将是(False,)。 -
@Maroon 也许知道一旦你
return某事,你的函数就完成了执行。你的for循环从不检查除数字是否可被 2 整除之外的任何内容。