Dalam matematika, tetrasi adalah operator hiper berikutnya setelah eksponensial, dan didefinisikan sebagai eksponensial berulang.
Penambahan ( a berhasil n kali)
Perkalian ( a ditambahkan ke dirinya sendiri, n kali)
Eksponensial ( a dikalikan dengan sendirinya, n kali)
Tetrasi ( sebuah eksponen dengan sendirinya, n kali)
Hubungan terbalik tetrasi disebut super-root, dan super-logaritma. Tugas Anda adalah untuk menulis sebuah program yang, diberikan A dan B, print B nd orde kedua super-akar A.
Sebagai contoh:
- jika A =
65,536
dan B =4
itu dicetak2
- jika A =
7,625,597,484,987
dan B =3
itu dicetak3
A dan B adalah bilangan bulat positif dan hasilnya harus angka floating point dengan ketepatan 5 digit setelah titik desimal. Hasilnya milik domain nyata.
Hati-hati, super-root mungkin punya banyak solusi.
Jawaban:
C - bertujuan untuk kejelasan, tidak berusaha memeras kode
Mempertimbangkan masukan:
Maka biasanya hanya ada satu solusi di ℝ, yang menyederhanakan masalah dengan cukup.
Kode adalah:
Untuk mengkompilasi:
Untuk berlari:
Misalnya:
4 2
3 3
3 π
n (2 ½ ) ➙ 2 sebagai n ➙ ∞? (batas terkenal)
Iya!
n (e 1 / e ) ➙ ∞ sebagai n ➙ ∞? (batas atas)
Keren! (e 1 / e ≅ 1.44466786101 ...)
sumber
Python, 87 karakter
Pencarian linear sederhana untuk jawabannya.
Di luar topik, tetapi apa yang * # $ (@! Ada pada
**
operator python ?sumber
(1e200)**2
ke1e(200**2)
?OverflowError
dalam kasus pertama.Mathematica,
3540Menghasilkan daftar semua solusi, dengan ketepatan 5 digit.
5 karakter lagi hanya untuk mendapatkan solusi nyata, yang diminta oleh aturan yang diperbarui.
sumber
Julia
Instruksi floating point diabaikan karena pertanyaan hanya mendefinisikan perilaku untuk bilangan bulat.
sumber
Kapan ini menjadi kode golf? Saya pikir itu adalah tantangan kode untuk menghasilkan algoritma terbaik!
kode-golf
APL, 33 karakter
Ini adalah pencarian linear sederhana, mulai dari C = 1 + 10 -6 dan menambahnya dengan 10 -6 hingga
log C log C log C ⋯ A ≤ 1 di
mana fungsi log C diterapkan secara berulang B kali.
Contohnya
Kode ini sangat lambat, tetapi untuk basis kecil seperti 2 atau 3 selesai dalam beberapa detik. Lihat di bawah untuk hal yang lebih baik.
tantangan kode
APL, kompleksitas logaritmik
Sebenarnya kompleksitas linear pada urutan root, logaritmik pada ukuran dan presisi hasil:
waktu = O (B × log (C) + B × log (D))
di mana B adalah urutan root, C adalah basis tetrasi yang diminta, dan D adalah jumlah digit presisi yang diminta. Kompleksitas ini adalah pemahaman intuitif saya, saya belum menghasilkan bukti formal.
Algoritma ini tidak memerlukan bilangan bulat besar, hanya menggunakan fungsi log pada angka floating point reguler, oleh karena itu cukup efisien pada angka yang sangat besar, hingga batas implementasi floating point (baik presisi ganda, atau angka FP besar sembarang pada Implementasi APL yang menawarkannya.)
Ketepatan hasil dapat dikontrol dengan menetapkan
⎕CT
(toleransi perbandingan) untuk kesalahan yang dapat diterima yang diinginkan (pada sistem saya itu default ke 1e14, kira-kira 14 digit desimal)Saya tidak yakin apakah di
1≥⍵⍟⍣n
atas dapat gagal dengan Kesalahan Domain (karena log argumen negatif dapat langsung gagal, atau memberikan hasil yang kompleks, yang tidak akan ada dalam domain≥
) tetapi saya belum dapat menemukan sebuah kasus yang gagal.Contohnya
'3' keluar sebagai nilai yang tepat karena kebetulan merupakan salah satu nilai yang langsung terkena oleh pencarian biner (mulai dari 2, dua kali lipat menjadi 4, dua bagian ke 3). Dalam kasus umum yang tidak terjadi, sehingga hasilnya akan mendekati nilai akar dengan kesalahan ⎕CT (lebih tepatnya, uji logaritmik setiap basis kandidat dilakukan dengan toleransi ⎕CT.)
sumber
Ruby, 79 byte
Ini sama dengan program di bawah ini, tetapi kurang akurat karena hanya menjalankan 99 loop.
Ruby, 87 byte
Cobalah online
Ini hanya pembelahan dua. Tidak Disatukan:
sumber
k [52 karakter]
Sebuah versi modifikasi dari posting saya sendiri n th akar
Contoh:
sumber
Haskell
Pencarian linear sederhana, mengembalikan yang pertama, kecocokan terkecil ditemukan.
Contoh
sumber
Mathematica, 41 byte tanpa optimasi
Mathematica pada dasarnya diciptakan untuk memecahkan masalah seperti ini. Salah satu solusi mudah adalah dengan membangun masalah sebagai rangkaian daya bersarang dan meneruskannya ke
Reduce
fungsi bawaan, yang mencari solusi analitik untuk persamaan. Akibatnya, berikut ini, selain menjadi kode ringkas yang tidak biasa, juga tidak kasar.Anda dapat menghapus batasan untuk hanya menyediakan solusi bilangan real jika Anda sabar dan ingin menghemat enam byte. Anda juga dapat mengekspresikan beberapa fungsi bersarang dalam bentuk yang disingkat untuk menyimpan beberapa byte lagi. Seperti yang diberikan, ia kembali demikian
sumber
05AB1E , 16 byte
Port jawaban Python @KeithRandall .
Cobalah online.
Penjelasan:
ÐU²FXm}
bisa jugaD²>и.»m
untuk byte-count yang sama:sumber