我是Python的新手,我正在尝试编写一个代码来检查数字是否为素数。到目前为止,我写过:
def main():
n = input("Enter number:")
isprime(n)
def isprime():
x = Prime
for m in range (1,n+1,1)
result = n % m
print result
main()
我不确定如何继续这样做。我知道我必须定义 isprime 。任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
您的第一个也是最大的问题是,您需要将n
列为isprime
的参数,然后才能在isprime
中使用它,然后才能在{{{}}中传递参数1}}。有关详细信息,请参阅Defining Functions上的教程。但基本上,它是这样的:
main
此外,def isprime(n):
会引发x = Prime
,因为没有任何名为NameError
的内容。鉴于它实际上并没有做任何事情,你应该删除它。
当然,这不会使它成为一个完整的主要测试功能,但它是如何从你所处的位置继续前进。
下一步是考虑从函数中返回的内容。如果您找到一个除以Prime
的值,那么显然n
不是素数,因此n
为假。如果您经历了所有可能性并且找不到任何划分isprime
的内容,则n
为真。因此,在正确的位置使用两个isprime
语句,您可以完成该功能。
一旦它至少总是返回True或False,你就有错误需要修复。*
查看从return
获得的数字。其中两个数字保证除以任何range(1, n+1, 1)
。你如何避免这个问题?
在您使用它之后,您可以进行优化。如果你在维基百科上查找primality test,你可以看到一种非常简单的方法来改进天真的试验分裂测试。一些研究将显示不同算法的优缺点。但是,如果您获得的内容足够快,那么通常不值得为优化付出更多努力。
*您可能需要考虑编写一个测试程序,在一堆数字上调用n
,并将结果与正确的答案进行比较(对于您已经知道的答案,您可以在头顶1)不是素数,2是素数,17是素数等等。这称为Test Driven Development,这是确保您涵盖所有可能情况的好方法 - 包括0,1,2,-3等异常值。 < / p>
答案 1 :(得分:1)
你的isprime
非常接近。第一行x = Prime
是不必要的,所以让我们摆脱它。
现在,让我们来看看你接下来要做什么:
您似乎想要检查是否有任何数字完全划分n
。虽然这是正确的方法,但您在测试的数字中包括n
和1
。出于显而易见的原因,这是错误的。
还有另一个错误:你使用n
而没有定义它(我想你希望它成为你函数的参数)。所以我们把所有这些放在一起:
def isprime(n):
for m in range(2, n):
if not n%m: # m divides n perfectly
return False
return True # if n were not prime, the function would have already returned
但更进一步,你不必检查2
和n-1
之间的每个数字。您只需检查2
与n
的平方根:
def isprime(n):
for m in range(2, int(n**0.5)+1):
if not n%m:
return False
return True