私は素数を使って特定の数の素因数をすべて見つけようとしています。私のコードでは、私は使用しているふるいの範囲外の素因数を見つけるために、非常に大きな数値を小さな数値で割り算する必要があります。これは問題ではないはずです。実際、メソッドは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)
私はあなたが良いふるいを願っています。その数の次の素因数(3と17の後)は143047654201 –
です。このメソッドは、3と17の要素を見つけてそれらを掛け合わせて51を求め、元の数を51で割って最後の素因数を求めます。 – Garrett1021
私はふるいに1e7のパラメータを使用しています。既知の素因数を一緒に乗算して数値を – Garrett1021