在Python中潜水大量时出现溢出错误

时间:2017-04-09 20:28:32

标签: python integer-overflow

我正在尝试使用代码来寻找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中使用的数字大小没有限制。提前致谢

1 个答案:

答案 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取模数,你应该加括号并使用整数除法运算符//而不是浮点数除法运算符/。我不确定你要做什么,所以我无法为你纠正你的代码。但请尝试使用//运算符。