私はパイソン初心者です。私は(a ** b) % 10
、可能な限り最も効率的な方法で計算することを目指しています (つまり、電力部分を簡素化します)。これを行う 1 つの方法を見つけました((a % 10) ** b) % 10
。私の質問は、これを行うためのより効率的な方法はありますか? この問題は、CodeFights タスクの拡張です。元の問題は受け入れられました(a ** b) % 10
。
数mod 10はリングを形成するため、結果に影響を与えることなく、すべての中間値で剰余mod 10を計算できます。
計算を大幅に高速化できるSquare-and-multiply とO(log b)
呼ばれるステップ アルゴリズムがあります。
基本的な考え方は、偶数のb
場合、結果を変更せずに、引数を二乗して指数を 2 で除算するだけでよいということです。奇数 のb
場合、1 のべき乗a
(または現在の引数)を抽出し、偶数の場合と同様に続行します (2 乗と 2 乗)。
したがって、これをまとめると、二乗乗算アルゴリズムを実装し、各ステップの後に剰余mod 10を計算すると、最後の桁を計算するための優れた効率的な方法が得られます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加