2017-08-20 5 views
1

私は素数を使って特定の数の素因数をすべて見つけようとしています。私のコードでは、私は使用しているふるいの範囲外の素因数を見つけるために、非常に大きな数値を小さな数値で割り算する必要があります。これは問題ではないはずです。実際、メソッドは1つを除いてチェックしたすべての数に対して完全に機能します。大小2つの整数を分けるときに間違った答えを得る

私が遭遇した問題は、この大きな数字を51で割って素因数を求め、51で乗算して元の数に等しいかどうかをチェックすることです。

intに変換するかどうかにかかわらず、または科学的表記で浮動小数点として残しても、機能しません。

フロートが完璧ではないことを理解していますが、この奇妙なエラーを回避する方法はわかりません。私は電卓に数字を差し込んで正しい答えを得ましたが、私のコードは私に間違った答えを与えます。

ここでは何が起こっていますか? 私のコードを実行すると、チェックがTrueの場合はFalseを返します。

私が以前に言ったように、この方法は、私が使用しているふるいの範囲外の要因を持っている、テストしている数値の1つで、私が問題を抱えているのはこの特定の数だけです。

正解は1,176,462,117,668,023,508,828,242,241 であるべきで、あなたがフロート部門を指摘するように、回答イム取得は1,176,462,117,668,023,481,334,235,136

l_number = 59999568001069198950240354291 
answer = 59999568001069198950240354291/51 
int_answer = int(answer) 
check = int_answer*51 
check2 = answer * 51 

print("The large number is: {:,d}".format(l_number)) 
print("Large number divided by 51: ", answer) 
print("If the check is == original number: ", check2 == 59999568001069198950240354291) 
print("Large number divided by 51 as an integer: {:,d}".format(int_answer)) 
print("That answer * 51 (should be original number): {:,d}".format(check)) 
print("If the integer check is == original number: ", check == 59999568001069198950240354291) 
+0

私はあなたが良いふるいを願っています。その数の次の素因数(3と17の後)は143047654201 –

+0

です。このメソッドは、3と17の要素を見つけてそれらを掛け合わせて51を求め、元の数を51で割って最後の素因数を求めます。 – Garrett1021

+0

私はふるいに1e7のパラメータを使用しています。既知の素因数を一緒に乗算して数値を – Garrett1021

答えて

1

であるため、64ビットのダブルで使用可能な限られた精度に正確ではありません。

それは(Pythonの3)整数除算

answer = 59999568001069198950240354291 // 51 

を使用する場合、Pythonは任意精度の整数演算を使用するので、これはワークス。

+0

に分けて求めたそれより大きな追加の因子を使用しています。ご覧のとおり、私はまだPythonを学んでいないので、あなたは私を非常に助けてくれました!!!! – Garrett1021

関連する問題