我正在尝试使用代码来寻找Wilson Primes以获得一些乐趣,让我重新回到编码的摇摆中,然而,当我尝试划分172时,我发现了! +1到173它给我一个溢出错误。这是我正在使用的代码:
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:对于float
,整数除法结果太大
我更改了代码,发现一旦数字173用作x,就会发生错误。任何人都可以让我知道为什么会这样吗?我环顾四周,但只发现答案表示python中使用的数字大小没有限制。提前致谢
答案 0 :(得分:1)
问题不是因子,而是你的计算
(math.factorial(x-1) + 1 / 5) % x
由于x
是一个整数,因此factorial返回一个整数。但是,Python 3中的1 / 5
返回浮点值0.2
。向float中添加一个整数会返回一个整数,因此Python会尝试将factorial转换为float。
但是,Python 3的整数可以是任何大小,但浮点数不是这样。浮点值仅限于计算机的数字处理器,通常为8个字节长,并且具有最大大小。超出了该大小,因此Python返回错误。
如果你想将一个加到阶乘,然后将该和除以5,然后用x
取模数,你应该加括号并使用整数除法运算符//
而不是浮点数除法运算符/
。我不确定你要做什么,所以我无法为你纠正你的代码。但请尝试使用//
运算符。