Pythonのdecimalモジュールを使用して分数を処理していますが、特定の分数の繰り返し部分だけを取得したいと思います。例:1/3の場合は3を取得したいのですが、1/7の場合は142857を取得したいのです。これを行うための標準機能はありますか?
3 に答える
答えを与えることは、プロジェクト euler のネタバレになる可能性があるため (これは通常、stackoverflow では行われません)、このヒントを提供したいと思います: これを読んでください(セクション 1.2 はベルを鳴らす必要があります)。
この質問はずっと前のことだと思いますが、おそらく人々はまだこのようなものを検索しているのではないかと考えたので、コーディングを試みて最終的に長い除算と割った余りをとったときの繰り返しの場所を見つけます。私はもともと、Ants Aasma によって提案された方法を使用しようとしていました。
私の関数は、質問への回答として使用できる文字列を出力しようとしていたため、1/7 でこのような出力を取得しようとしていました。「0.142857 142857...」
1/7 などの 10 進数は、Ants Aasma が提供する方法を使用して非常に簡単に見つけることができますが、1/35 などを試みると苦労します。これは 9 でいっぱいの数に分割できません。まず第一に、分母は 10 の因数を割る必要があります。つまり、すべての 5 と 2 を割って、1/35 などの分数を 0.2/7 に変換します。
1/70 などの分数の場合、実際に 1/7 を見つけて、小数点以下の直後に 0 を付けるのが最善の方法だと思います。1/35 の場合は、0.2/7 に変換してから、繰り返し部分と小数点以下の間に 0 を入れて 2/7 に変換します。
Ants Aasma が推奨する方法を使用する場合に留意すべきヒントがいくつかあります。
分数の分母で正確に割り切れる 10**k - 1 の形式の最初の数を見つけ、それを分母で割り、分子を掛けると、繰り返し部分が得られます。