2つの数値nとmが与えられた場合、無限の電力塔を評価します。
n ^(n + 1)^(n + 2)^(n + 3)^(n + 4)^ ... mod m
^は右結合であることに注意してください。したがって、2 ^ 3 ^ 4 = 2 ^(3 ^ 4)。さて、どうやって値を右連想演算子の無限シーケンスに割り当てることができますか?
f(n、m、i)を、無限の電力塔の最初のi項を含む電力塔として定義します。次に、i> Cごとにf(n、m、i)= f(n、m、C)のような定数Cがあります。したがって、無限の電力塔は特定の値に収束すると言えます。その価値に興味があります。
プログラムは、合理的な最新のPCで10秒未満でn = 2017、m = 10 ^ 10を計算できる必要があります。つまり、ブルートフォーシングを行わずに、実際のアルゴリズムを実装する必要があります。
プログラミング言語の数値制限については、n <2 30およびm <2 50であると想定できますが、アルゴリズムは理論的には任意のサイズn、mで機能する必要があります。ただし、プログラムはこれらのサイズ制限内の入力に対して正しくなければなりません。入力がこれらの制限内であれば、中間値のオーバーフローは許されません。
例:
2, 10^15
566088170340352
4, 3^20
4
32, 524287
16
nそして、互いに素であるとmは限りません。