明确排除时以零误差为模
Modulo by zero error when specifically excluded
我写了一个素数检查程序,检查余数直到一个数的平方根。我专门用 1 和 0 删除了模,程序仍然 returns 上述错误。这是程序:
def primeCheck(n):
x = math.floor(math.sqrt(n))
for i in range(x):
if (n != 1) and (n != 0):
if n%i == 0:
return False
return True
它适用于除 2 以外的所有整数。
primeCheck(2)
x = 1
i in range(1)
→0
因此第四行的 if
语句 returns False
但它仍然是 returns 错误。
三个问题:
专门处理n
小于2的情况
您需要将 i
打折为 0
和 1
。
您需要 包括 数字的四舍五入平方根(否则您会错误地将素数平方数 - 例如 49 - 报告为素数)。
(2)和(3)写成
就解决了
for i in range(2, 1 + math.floor(math.sqrt(n))):
并删除错误的检查 if (n != 1) and (n != 0):
。
试试这个:
def primeCheck(n):
x = math.floor(math.sqrt(n))
if (n <= 1):
return False
for i in range(2,x+1):
if n%i == 0:
return False
return True
在n % i
中,不是n
不能为零,是i
。
检查n != 0
在这种情况下没有用,您需要检查i != 0
。
我写了一个素数检查程序,检查余数直到一个数的平方根。我专门用 1 和 0 删除了模,程序仍然 returns 上述错误。这是程序:
def primeCheck(n):
x = math.floor(math.sqrt(n))
for i in range(x):
if (n != 1) and (n != 0):
if n%i == 0:
return False
return True
它适用于除 2 以外的所有整数。
primeCheck(2)
x = 1
i in range(1)
→0
因此第四行的 if
语句 returns False
但它仍然是 returns 错误。
三个问题:
专门处理
n
小于2的情况您需要将
i
打折为0
和1
。您需要 包括 数字的四舍五入平方根(否则您会错误地将素数平方数 - 例如 49 - 报告为素数)。
(2)和(3)写成
就解决了for i in range(2, 1 + math.floor(math.sqrt(n))):
并删除错误的检查 if (n != 1) and (n != 0):
。
试试这个:
def primeCheck(n):
x = math.floor(math.sqrt(n))
if (n <= 1):
return False
for i in range(2,x+1):
if n%i == 0:
return False
return True
在n % i
中,不是n
不能为零,是i
。
检查n != 0
在这种情况下没有用,您需要检查i != 0
。