2014-11-24 32 views
-3

我正在编写一个代码来确定一个数是否为素数。这是我到目前为止已经聚集:Python:素数测试

def isprime(p): 
'''check if integer p is a prime''' 
# make sure n is a positive integer 
p = abs(int(p)) 
# 0 and 1 are not primes 
if n < 2: 
    return False 
# 2 is the only even prime number 
if n = 2: 
    return True  
# all other even numbers are not primes 
if not p & 1: 
    return False 
# for all odd numbers 
for x in range(3, int(n**0.5)+1, 2): 
    if n % x == 0: 
     return False 
return True 
+4

你的问题是什么? – sfjac 2014-11-24 22:09:56

+1

1.请修复您的缩进。 2.发布的代码会抛出一个错误,因为'make'没有被定义(我认为该行意在成为评论)。 3.什么是实际问题? 4.观察结果是什么,它与预期有什么分歧? 5.如果n = 2:'会给你一个错误。请发布您正在使用的实际代码 – inspectorG4dget 2014-11-24 22:12:32

+2

请使您的代码实际上有效的代码正确的缩进,注释评论等 – abarnert 2014-11-24 22:12:42

回答

0

它看起来像你特林利用计算质数的琐碎(又名慢)方法:为总理候选人P,请尝试将所有整数2〜地板(SQRT(p))。

eps = 1e-9 
def isprime(p): 
    int_p = int(p) 
    # only integers are prime, accounting for floating point rounding error 
    if abs(int_p - p) < eps: 
     return False 
    else: 
     # a number is prime only if it cannot be evenly divided 
     # by all prime factors lower than the number 
     return all(p % i != 0 for i in xrange(2, int(p**0.5)+1)) 

为什么你想仅仅通过开方(P)从3检查奇数的原因可能是因为你知道所有的偶数大于2是不是素数。你可以做得比从这个检查中消除偶数更好...你只需要检查从2到sqrt(p)的素数。如果您碰巧多次呼叫isprime,则可以构建这些素数的缓存。有更高效的素数算法,取决于你试图解决的问题(你是否试图从下限到上限找到所有素数?你是否想要找到素数的数量?你试图找到任何素数?)