Göreviniz, aşağıdaki adımlarla yavaşça üs alma işlemini hesaplamaktır:
İki giriş verildiğinde (bu örnekte 4 ve 8), denklemi bitler halinde hesaplayarak üssü hesaplamanız gerekir. Daha 4^8
büyük bir taban değerine (4) ve daha küçük bir üsse (8) sahip olursunuz. Bunu daha fazla üs alma ve bölme kullanarak yapabilirsiniz. Üs değerini X değerine bölebilirsiniz ( X'in üssün ana bölücüsü olması koşuluyla ) ve temel değeri ( B ) 'ye yapabilirsiniz B^X
. Örneğin, şunları yapabilirsiniz:
4^8 = (4 ^ 2)^(8 / 2) = 16^4
Önceki denklemde X'i 2 ile değiştirdim .
Aşağıdakilerle 16^4
tekrar 'basitleştirebilirsiniz' X = 2
:
16^4 = (16 ^ 2)^(4 / 2) = 256^2
Ve son olarak bir sayı hesaplayın (tekrar, X = 2
):
256^2 = (256 ^ 2)^(2 / 2) = 65536^1 = 65536
Bu nedenle,
4^8 = 16^4 = 256^2 = 65536
Bu vermeniz gereken çıktıdır. Çıkış ayırıcı biraz esnektir, örneğin, denklemleri yerine satırsonu veya boşlukla ayırabilirsiniz =
. Veya, bunları bir listeye koyabilirsiniz (ancak ^
ayırıcı olarak bir rakam veya karakter kullanmamalısınız ).
Martin Ender'in işaret ettiği gibi ^
, bu da esnektir. Örneğin , çıktıda [A, B]
veya A**B
yerine kullanabilirsiniz A^B
.
X yalnızca asal olabilir, yani X = 8
doğrudan çözüme ulaşmak için kullanamazsınız ve X değerleri yalnızca ikinci girdinin (üs) birincil faktörleri olacaktır.
Örnekler:
(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)
Girdi biçiminin de esnek olduğuna dikkat edin (örneğin, alabilir A \n B
veya A B
bunun yerine kullanabilirsiniz A^B
.) Açıkçası, iki argüman alan bir işlev yazarsanız bu bir sorun olmaz.
İkinci örnekte, doğrudan hesaplamaya gidiyoruz, çünkü 11
asal ve başka adım alamıyoruz.
Bunu çözmek için bir program veya işlev yazabilirsiniz ve sırasıyla değeri yazdırabilir veya döndürebilirsiniz.
Bu kod golf olduğu için en kısa kod kazanır!
x^1
mi?
32^3
ve8^15
512 değil.