def isprime(x):
for a in range(2,(x//2)+1):
if((x<=0) or (x%a==0)):
return(False)
return(True)
这对负值不起作用。例如:isprime(-3)
返回True
但必须返回False
。请帮忙。
答案 0 :(得分:0)
问题是你正在检查for循环中的数字是否为负数。例如,如果x = -3,那么您尝试在范围(2,-1)中运行for循环,该循环为None。所以for循环永远不会运行,因此返回True。
def isprime(x):
if x<=0:
return(False)
for a in range(2,(x//2)+1):
if(x%a==0):
return(False)
return(True)
答案 1 :(得分:0)
根据它的小学定义, prime 数字仅为正数定义,因此您的函数应为每个负数返回False
,例如:
def isprime(x):
if x <= 0:
return False
for a in range(2, (x//2)+1):
if x % a == 0:
return False
return True
话虽如此,有可能扩展定义(如在数学中的某些字段中所做的那样),也包括负数(有关进一步讨论,请参阅here和here)。在这种情况下,对于每个负数 -n ,如果 n 为素数,则 -n 为素数。因此,您的代码可能类似于:
def isprime(x):
if x <= 0: # or use any |abs| method you'd like, like numpy's
x = -x
for a in range(2, (x//2)+1):
if x % a == 0:
return False
return True