素数检查Python

时间:2012-05-19 14:44:19

标签: python primes

我写了这个非常简单的素数检查:

prime = int(input())
if prime % prime == 0 and prime % 2 != 0 and prime % 3 != 0 or prime == 2 or prime == 3:
    print("true")
else:
    print("false")

......这似乎在某种程度上有效,但我不确定它是否正确,有人可以确认一下吗?

3 个答案:

答案 0 :(得分:6)

尽可能简单:

def isprime(n):
    """check if integer n is a prime"""
    # range starts with 2 and only needs to go up the squareroot of n
    for x in xrange(2, int(n**0.5)+1):
        if n % x == 0:
            return False
    return True

对于令人印象深刻的素数生成器,请参阅here

答案 1 :(得分:5)

  

我不确定它是否正确

不是。举一个反例,它认为25是素数。更糟糕的是,有很多这样的反例。

对于执行此操作的各种(正确)方法,

Wikipedia值得阅读。

答案 2 :(得分:1)

关于primality的维基百科文章可以帮助您设计更好的算法。其中有很多,但基本的并不复杂。

  • 首先,偏离素数必须是大于1的正整数的事实。该不变量意味着如果n <1。 2你可以立即归还假。在您的代码中,n = 0失败。
  • 在一个天真的方法中,你可以移动检查从1到n的n的所有除数。如果你只找到两个,那么你知道这是一个素数。
  • 更直观的方法可能是得出结论:每个数字都可以被1和它自身整除,因此,你可以检查只有2和n-1之间的除数。在你找到n的除数的那一刻,你可以得出结论n不是素数。
  • 一种改进的方法可以识别所有偶数都可被2整除,因此,如果n不能被2整除,那么从那里开始只能检查奇数除数。
  • 最后,您不需要检查n之前的所有除数。检查除数直到n的平方根就足够了。如果你达到那个阈值时没有找到除数,那么你可以得出结论n是素数。