def is_prime(x):
list1 = []
count = 1
if x < 0:
return False
elif x == 1:
return False
elif x == 2:
return True
for item in range(x):
list1.append(x - count)
count += 1
if count == x:
list1.remove(1)
for item in list1:
if x / item == 1:
return False
else:
return True
这在一些数字上失败了,我不确定为什么。我很确定这主要是我的数学问题,还是我对素数的理解?我正在通过代码学院学习,所以请随意向我提示正确的方向而不是给我完全的答案。提前谢谢大家!
答案 0 :(得分:1)
您似乎正在使用Python 2,而Python 3和Python 2之间的除法运算的差异会导致您的问题。在Python 2中,普通除法得到一个整数,例如5/4 = 1,而在Python 3中,5/4 = 1.25。因此,在python 2中,可以将5视为函数中的非素数。
您可以尝试其他数学运算,例如模块%
来进行判断,而不是除法。
答案 1 :(得分:0)
import math
def is_prime(x):
count = 0
if x < 0:
return False
elif x == 1:
return False
elif x == 2:
return True
for n in range(1,int(math.ceil(math.sqrt(x)))+1): #only looks up to sqrt(x)
if not x % n: #if n is divisor of x then it is factor
count += 1
if count > 1: #if we have 2 or more factors then it isn't a prime
return False
return True
一些测试:
print(all(is_prime(p) for p in [2, 3, 5, 7, 11, 23, 29, 41, 43, 47, 61, 67, 83, 89, 101, 113, 131]))
print(any(is_prime(np) for np in [1,4,6,8,9,10,12,14,15,16]))
>>>
True
False
答案 2 :(得分:0)
查看modulo operator,在分割两个数字时返回余数
>>> 4 % 2
0
>>> 5 % 2
1
答案 3 :(得分:0)
试试这个我只测试过几个数字:
def is_prime(n):
i = 2
sq_root_n = n**0.5
if n <= 0:
return False
while i < sq_root_n:
if n % i == 0:
return False
i += 1
return True
答案 4 :(得分:0)
def is_prime(x):
maxdiv = x - 1
if x < 2:
return False
elif x == 2:
return True
elif x >= 2:
for n in range(2,maxdiv):
if x % n == 0:
print '%d is not prime. I divided it by %d' % (x, n)
return False
else:
return True