2017-04-09 256 views
0

私はコードを使ってWilson Primesを楽しみにしていますが、コードスイングに戻すためにコードを使用しようとしていますが、 ! +1 173によって、私にオーバーフローエラーが返されます。ここで私が使用していたコードされていますPythonで大きな数値をダイビングするときにオーバーフローエラーが発生する

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で使用される数字のサイズに制限がないと答えただけでした。事前

答えて

1

のおかげで、問題は階乗ではない、それはあなたの計算である

(math.factorial(x-1) + 1/5) % x 

xが整数であるので、階乗は整数を返します。ただし、Python 3の1/5はfloat値0.2を返します。 floatに整数を追加すると整数が返されるので、Pythonは階乗をfloatに変換しようとします。

しかし、Python 3の整数は任意のサイズにできますが、浮動小数点数には当てはまりません。浮動小数値は、通常8バイトの長さのコンピュータの数値プロセッサに限定され、最大サイズを持ちます。そのサイズを超えているので、Pythonはエラーを返します。あなたは、その後、階乗に1を追加し5によってその合計を割り、その後、xとモジュラスを取ることを意味する場合

、あなたは括弧を追加し、むしろ、その後フロート除算演算子/整数の除算演算子//を使用する必要があります。あなたがしようとしていることがわからないので、コードを修正することはできません。しかし、//オペレータをお試しください。

関連する問題