我尝试(并且失败)编写一个简单的函数来检查数字是否为素数。我遇到的问题是,当我进入if语句时,无论输入如何,它似乎都在做同样的事情。这是我的代码:
def is_prime(x):
if x >= 2:
for i in range(2,x):
if x % i != 0: #if x / i remainder is anything other than 0
print "1"
break
else:
print "ok"
else:
print "2"
else: print "3"
is_prime(13)
评论的第一行是我确定问题所在。它打印" 1"无论我用什么整数作为参数。我很抱歉这可能是一个愚蠢的问题,我根本不是一个经验丰富的程序员。
答案 0 :(得分:3)
您的代码实际上非常接近功能。您只是在条件中遇到逻辑错误。
您可以对primality test进行一些优化,例如只检查给定数字的平方根。
def is_prime(x):
if x >= 2:
for i in range(2,x):
if x % i == 0: # <----- You need to be checking if it IS evenly
print "not prime" # divisible and break if so since it means
break # the number cannot be prime
else:
print "ok"
else:
print "prime"
else:
print "not prime"
答案 1 :(得分:2)
问题在于这一行:
if x % i != 0:
您正在测试x % i
是否不 0,对于任何相对素数的整数对都是如此(因此,您始终将其打印出来)
应该是:
if x % i == 0:
答案 2 :(得分:0)
尝试使用return语句而不是(或除了)print语句,例如:
from math import sqrt # for a smaller range
def is_prime(x):
if x <= 2:
return True
for i in range(2, int(sqrt(x)) + 1):
if x % i == 0:
print "%d is divisible by %d" % (x,i)
return False
return True
is_prime(13)
True
is_prime(14)
14 is divisible by 2
False
答案 3 :(得分:0)
这种检查可以是单一表达式:
def is_prime(n):
return n>1 and all(n%k for k in range(2,n//2))