Python:确定数字是否为素数

时间:2014-11-24 22:26:00

标签: python

我是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 。任何帮助将不胜感激。谢谢!

2 个答案:

答案 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。虽然这是正确的方法,但您在测试的数字中包括n1。出于显而易见的原因,这是错误的。

还有另一个错误:你使用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

但更进一步,你不必检查2n-1之间的每个数字。您只需检查2n的平方根:

之间的数字
def isprime(n):
    for m in range(2, int(n**0.5)+1):
        if not n%m:
            return False
    return True