あなたの仕事は、次の手順でゆっくりとべき乗を計算することです。
2つの入力(この例では4と8)が与えられた場合、ビットごとに方程式を計算して累乗を計算する必要があります。すると4^8
、ベース値が大きくなり(4)、指数が小さくなります(8)。より多くのべき乗と除算を使用してこれを行うことができます。指数を値Xで除算し(Xが指数の素因数である場合)、ベース値(B)をにすることができB^X
ます。たとえば、次のことができます。
4^8 = (4 ^ 2)^(8 / 2) = 16^4
前の方程式でXを2に置き換えました。
次のようにして16^4
、さらに「単純化」できますX = 2
。
16^4 = (16 ^ 2)^(4 / 2) = 256^2
そして最後に数を計算します(もう一度X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
したがって、
4^8 = 16^4 = 256^2 = 65536
これはあなたが与えるべき出力です。出力セパレーターは少し柔軟性があります。たとえば、数式をの代わりに改行またはスペースで区切ることができます=
。または、それらをリストに入れることもできます(ただし^
、区切り文字として数字や文字を使用しないでください)。
Martin Enderが指摘したように、これ^
も柔軟性があります。たとえば、あなたが使用することができます[A, B]
またはA**B
代わりのA^B
出力に。
Xは素数のみである可能性があります。これはX = 8
、解に直行するために使用できないことを意味し、Xの値は2番目の入力の素因数(指数)になります。
例:
(input) -> (output)
4^8 -> 4^8=16^4=256^2=65536
5^11 -> 5^11=48828125
2^15 -> 2^15=32^3=32768 (2^15=8^5=32768 is also a valid output)
入力形式も柔軟であることに注意してください(例:A \n B
またはのA B
代わりに使用できA^B
ます。明らかに、2つの引数を取る関数を作成する場合、これは問題になりません。
2番目の例で11
は、素数であり、これ以上ステップを実行できないため、計算に直接進みます。
これを解決するプログラムまたは関数を作成し、それぞれ値を出力または返すことができます。
これはcode-golfなので、その最短コードが勝ちます!
x^1
?
32^3
および8^15
512のいずれかではありません。