我试着用一个代码来寻找Wilson素数,以获得一些乐趣,并让我回到编码的摇摆中,然而,当我试图除以172时,我发现!+它给我一个溢出错误。以下是我使用的代码:
import math
x = 2
while x < 1000:
if math.factorial(x-1) + 1 % x == 0 and (math.factorial(x-1) + 1 / 5) % x == 0 :
print(x)
x += 1
当我跑步的时候
5
13
OverflowError: integer division result too large for a float
我修改了代码,发现数字173用作x时就会出错。有人能告诉我为什么会这样吗?我环顾四周,发现答案是python中使用的数字大小没有限制。提前谢谢
问题不在于阶乘,而在于你的计算
由于
x
是一个整数,所以阶乘返回一个整数。但是,python3中的1 / 5
返回浮点值0.2
。将一个整数添加到一个float返回一个整数,因此Python尝试将factorial转换为float。在然而,python3的整数可以是任意大小,但对于float则不是这样。浮点值仅限于计算机的数字处理器,通常为8字节长,并且具有最大大小。超出了该大小,因此Python返回一个错误。在
如果你想在阶乘上加一个,然后把这个和除以5,然后用
x
取模,你应该加上括号并使用整型除法运算符//
,而不是浮点除法运算符/
。我不知道你想做什么,所以我不能为你更正你的代码。但是试试//
运算符。在相关问题 更多 >
编程相关推荐