私はシリーズを持っています
S = i^(m) + i^(2m) + ............... + i^(km) (mod m)
0 <= i < m, k may be very large (up to 100,000,000), m <= 300000
和を求めたい。結果に分母があり、存在しない可能性のある剰余逆数を見つける必要があるため、幾何学的累進 (GP) 式を適用できません (分母と m が互いに素でない場合)。
そこで私は、これらの累乗が k よりもはるかに短い長さのサイクルを作るという仮定を立てて、別のアルゴリズムを作成しました (これは剰余方程式であり、2,7,9,1,2,7,9 のようなものが得られるためです)。 1....) そして、そのサイクルが上記のシリーズで繰り返されます。したがって、0 から k まで反復する代わりに、サイクル内の数値の合計を見つけてから、上記の系列のサイクル数を計算して乗算します。そのため、最初にこの数を見つけi^m (mod m)
てから、最初の要素に再び到達するまで、各ステップでモジュロを取りながら何度も乗算しました。
しかし、実際にアルゴリズムをコーディングすると、i の値によっては、非常に大きなサイズのサイクルが得られました。そのため、終了するまでに長い時間がかかったため、私の仮定は正しくありません。
では、私たちが見つけることができる他のパターンはありますか? (基本的に、k を反復処理したくありません。) 合計を求める効率的なアルゴリズムのアイデアを教えてください。