Latar Belakang
Dapat ditunjukkan bahwa untuk bilangan bulat apa pun k >= 0
, f(k) = tan(atan(0) + atan(1) + atan(2) + ... + atan(k))
adalah bilangan rasional.
Tujuan
Tulis program atau fungsi lengkap yang ketika diberikan k >= 0
, output f(k)
sebagai fraksi tunggal yang dikurangi (pembilang dan penyebutnya adalah coprime).
Uji kasus
Beberapa nilai pertama adalah
f(0) = (0,1)
f(1) = (1,1)
f(2) = (-3,1)
f(3) = (0,1)
f(4) = (4,1)
f(5) = (-9,19)
f(6) = (105,73)
Aturan
- Celah standar dilarang.
- Input dan output mungkin dalam format apa pun yang nyaman. Anda dapat menampilkan
f(k)
sebagai stringnumerator/denominator
, sebagai tupel dari dua bilangan bulat, sebagian kecil atau objek rasional, dll. Jika Anda menghasilkan string, berikan hanya dua bilangan bulat, yaitu,3/2
bukan keluaran1 1/2
. - Ini adalah kode-golf, jawaban terpendek (dalam byte) menang.
atan(0)
Istilah tidak perlu.Jawaban:
M , 11 byte
Cobalah online!
Menggunakan formula OEIS
x(n) = (x(n-1)+n)/(1-n*x(n-1))
denganx(0) = 0
.sumber
Mathematica, 28 byte
Cobalah online!
Pendekatan yang lebih panjang, tetapi lebih menarik (32 byte):
Cobalah online!
sumber
o'_'o
Mathematica dano'_'o
Python 2 ,
7672 byteGunakan identitas:
Kita punya:
Cobalah online!
Terima kasih kepada Luis Mendo, simpan 4 byte.
sumber
APL (Dyalog) , 14 byte
Membutuhkan
⎕FR←1287
( 128 bit F loating-point R epresentation) untuk input kecil. Dibawak
sebagai argumen yang benar.Cobalah online!
⍳
bilangan bulat satu sampaik
(nol tidak diperlukan karena 0 = arctan 0)¯3+.○
jumlah garis singgung arcus3○
garis singgung1(
...)
terapkan fungsi tacit berikut dengan 1 sebagai argumen kiri dan di atas sebagai argumen kanan:∧
kelipatan umum terendah (dari 1 dan argumen yang benar); memberi pembilang÷
dibagi dengan,
Rangkaian (dari 1 dan argumen yang benar); memberi pembilang dan penyebutsumber
Haskell , 52 byte
Ini menggunakan ekspansi seri OEIS:
Cobalah online!
Atau versi pointfree:
sumber
JavaScript (ES6), 80 byte
Mengembalikan pasangan [pembilang, penyebut]. Penjelasan: Biarkan
f(n-1) = a/b
kemudianf(n) = atan(tan(n)+tan(a/b)) = (n+a/b)/(1-n*a/b) = (b*n+a)/(b-n*a)
. Kemudian tetap untuk mengurangi fraksi ke ketentuan terendah.Lingkungan ES6 Online
sumber
Pari / GP , 36 byte
Cobalah online!
Atau sama panjangnya:
Cobalah online!
sumber
05AB1E ,
3326 byteCobalah online!
Penjelasan
sumber
Oktaf , 30 byte
Cobalah online!
sumber
Casio-Basic, 35 byte
tan -1 harus dimasukkan sebagai yang ada di keyboard Trig; atau -1 dapat dimasukkan secara terpisah dari abc> Keyboard matematika. Menurut manual fx-CP400, ini adalah karakter dua byte tunggal (764).
Fungsi, 34 byte untuk kode, +1 byte untuk ditambahkan
k
sebagai argumen.Penjelasan
seq(tan-1(n),n,0,k)
menghasilkan semua nilaitan-1(n)
dari 0 hingga k.sum
menambahkan mereka semua bersama-sama, lalutan
melakukan fungsi tangen pada mereka.tExpand
kemudian akan mengubahnya menjadi fraksi tunggal.sumber
⁻
dan¹
masing-masing dua byte;E5CC
danE5C1
.Julia 0.6.0 40 byte
k->rationalize(tan(sum(x->atan(x),1:k)))
Ini merupakan implementasi langsung dari pertanyaan. Ketepatan merasionalisasi kadang-kadang bisa aneh tetapi berfungsi dengan baik 99% dari waktu.
sumber