TypeError: range()所期望的整数结束参数,得到浮动。
如果我使用Integer,它将不包括3作为素数.我不想添加与1相同的3.
代码-->
import math
def is_prime(n):
if n==1:
return False
if n == 2:
return True
if n > 2 and n%2 == 0:
return False
max_divisor =math.floor(math.sqrt(n))
for d in range(3,1 + max_divisor , 2 ) :
if n % d == 0 :
return False
return True
for n in range(1,21):
print (n,is_prime(n))发布于 2017-08-09 16:24:10
math.floor(),只需将平方根转换为int,即:max_divisor = int(math.sqrt(n))return True应该在for循环之外。if type(n) is not int or n <= 0 -> return None。如果您有此功能,也可以消除if n > 2 and n%2 == 0:的第一部分。下列措施应能发挥作用:
import math
def is_prime(n):
if type(n) is not int or n <= 0:
return None
if n==1:
return False
if n == 2:
return True
if n%2 == 0:
return False
max_divisor = int(math.sqrt(n))
for d in range(3, 1 + max_divisor, 2):
if n % d == 0 :
return False
return True
for n in range(1,21):
print (n,is_prime(n))输出:
$ python review.py
(1, False)
(2, True)
(3, True)
(4, False)
(5, True)
(6, False)
(7, True)
(8, False)
(9, False)
(10, False)
(11, True)
(12, False)
(13, True)
(14, False)
(15, False)
(16, False)
(17, True)
(18, False)
(19, True)
(20, False)如果最后的范围只是为了演示您的函数是否工作,那么这是很好的。但是,如果您特别需要间隔上的素数,请尝试实现筛,筛。
https://codereview.stackexchange.com/questions/172473
复制相似问题