Hampir setiap fungsi dapat diekspresikan sebagai polinomial dengan suku tak terbatas.
Sebagai contoh, e^x = 1 + x + x^2/2! + x^3/3! + x^4/4! + ...
Sebagai contoh, sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...
Koefisien dari n
istilah -th membentuk urutan, dan fungsi yang sesuai disebut Fungsi Pembangkitan urutan.
Koefisien dari n
istilah -th membentuk urutan.
Seringkali, n
istilah -th akan memiliki penyebut n!
. Oleh karena itu, kami melipatgandakan koefisien dengan n!
memperoleh urutan lain, yang Fungsi Penghasil Eksponensial akan menjadi fungsi asli.
Sebagai contoh, urutan yang Fungsi eksponensial Membangkitkan adalah e^x
akan 1,1,1,1,...
.
Sebagai contoh, urutan yang Fungsi eksponensial Membangkitkan adalah sin(x)
akan 0,1,0,-1,0,1,0,-1,...
.
Tugas
Tugas Anda adalah untuk menemukan n
istilah -th dari urutan yang Fungsi eksponensial Membangkitkan adalah tan(x)
.
Testcases
n result
0 0
1 1
2 0
3 2
4 0
5 16
6 0
7 272
8 0
9 7936
10 0
11 353792
12 0
13 22368256
14 0
15 1903757312
16 0
17 209865342976
18 0
19 29088885112832
20 0
21 4951498053124096
22 0
23 1015423886506852352
24 0
25 246921480190207983616
26 0
(Disalin dari sini .) (Peringatan: 0
istilah -th berbeda)
Contoh implementasi
# copied from https://github.com/Mego/Seriously/blob/v2.0/SeriouslyCommands.py#L16
def memoized(f):
memo = {}
def m_fun(*args):
if args in memo:
return memo[args]
else:
res = f(*args)
memo[args] = res
return res
return m_fun
# copied from https://github.com/Mego/Seriously/blob/v2.0/SeriouslyCommands.py#L169
@memoized
def binomial(n,r):
if r > n:
return 0
elif r==n:
return 1
res = 1
i = 1
while i<=r:
res *= (n+1-i)
res /= i
i+=1
return int(res)
# 2*u(n+1) = Sum_{k=0..n} binomial(n, k)*u(k)*u(n-k)
# from A000111
@memoized
def u(n):
if n<0: return 0
if n==0: return 1
if n==1: return 1
return sum([binomial(n-1,k)*u(k)*u(n-1-k) for k in range(n)])//2
def t(n):
if n%2 == 0: return 0
return u(n)
print('\n'.join([str(x) + ' ' + str(t(x)) for x in range(26)]))
Referensi
- Menghasilkan fungsi di Wikipedia
- Fungsi menghasilkan eksponensial di Wikipedia
- Contoh fungsi penghasil eksponensial di Wikipedia
- Menghasilkan fungsi di MathWorld
- Fungsi menghasilkan eksponensial di MathWorld
- Serial Taylor di Wikipedia
- Penurunan 9 syarat pertama dari urutan yang diperlukan
- Wajib OEIS A009006 (Perhatikan bahwa
0
istilah -th berbeda) - Algoritma
- OEIS A000111: angka atas / bawah
Jawaban:
CJam (
33 32 27 26 2320 byte)Demo online
Pembedahan
Ini pada dasarnya mengimplementasikan perulangan yang dijelaskan oleh xnor .
Atau dengan pendekatan yang agak berbeda, untuk 23 byte:
Demo online . Terima kasih kepada Dennis untuk 3 byte.
Pembedahan
Atau dengan pendekatan yang sangat berbeda, untuk 29 byte:
Demo online
Sayangnya diperlukan kasus khusus untuk input
0
.Pembedahan
Anda mungkin berpikir "WTF ?! Dia menjawab pertanyaan yang salah." Jika demikian, itu bisa dimengerti, tetapi kedua pendekatan itu memang memberikan hasil yang benar .
sumber
[WW]3ew
.0
perlu menjadi kasus khusus, karena itu mengevaluasi untuk1
.ri_1&a{{1$+}*]W%0+}@*0=
menghemat 3 byte.Julia,
403832 byteInput dan output dalam bentuk
BigFloat
s. Cobalah online!Latar Belakang
Rangkaian fungsi tangen Maclaurin memenuhi identitas
setiap kali x terletak pada jari-jari konvergensi, di mana B n adalah angka Bernoulli.
Karena B 2 (n + 1) dan (-1) n memiliki tanda yang sama, B 2n + 1 = 0 jika n> 0 dan B 1 = 1/2 , kita dapat menulis ulang di atas sebagai berikut.
Selanjutnya, setiap kali n adalah bilangan bulat non-negatif, kita miliki
di mana ζ menunjukkan fungsi Riemann zeta .
Dari ini, dengan konvensi 0 0 = 1 , ia mengikutinya
yang merupakan formula yang digunakan implementasi.
sumber
Python, 57 byte
Kurang golf:
Kita dapat menghitung
i
koefisien th dari fungsi pembangkit eksponensial dengan membedakan waktu fungsi tangeni
dan mengevaluasi pada0
. Setiap turunan adalah polinomial dalamtan(x)
, dan nilainya pada 0 adalah istilah konstannya.Kami secara ekspresif mengekspresikan koefisien
tan(x)**j
dalami
turunantan
dengan fungsif(i,j)
. Ekspresi rekursif berasal dari relasitan(x)' = 1 + tan(x)**2
.Jadi, turunan dari
tan(x)**j
adalahJadi, kontributor
tan(x)**j
dalami
turunannya adalahtan(x)**(j-1)
dantan(x)**(j+1)
dalam(i-1)
turunan pertama, masing-masing dengan koefisien sama dengan kekuatannya. Ini memberikan ekspresi rekursifPerhatikan bahwa kita tidak perlu mengecualikan eksponen negatif
j
karena mereka tetap mengevaluasi ke nol dan tidak berkontribusi karena persimpanganj=0
memberikan pengganda0
.Kasus dasar
i==0
korespondensi dengantan(x)
dirinya sendirij==1
, dan nol koefisien sebaliknya. Evaluasi akhir terjadi pada istilah konstanj=0
, yang dimasukkan sebagai nilai default.sumber
Mathematica, 20 byte
Pendekatan lurus ke depan. Hitung n th turunan dari tan (x) dan mengevaluasinya di x = 0 .
Pemakaian
sumber
Haskell, 48 byte
Kita dapat menghitung
i
koefisien th dari fungsi pembangkit eksponensial dengan membedakan waktu fungsi tangeni
dan mengevaluasi pada0
. Setiap turunan adalah polinomial dalamtan(x)
, dan nilai 0 adalah istilah konstannya.Kami secara ekspresif mengekspresikan koefisien
tan(x)^j
dalami
turunantan
dengan fungsii%j
. Ekspresi rekursif berasal dari relasitan(x)' = 1 + tan(x)^2
.Jadi, turunan dari
tan(x)^j
adalahJadi, kontributor
tan(x)^j
dalami
turunannya adalahtan(x)^(j-1)
dantan(x)^(j+1)
dalam(i-1)
turunan pertama, masing-masing dengan koefisien sama dengan kekuatannya.sumber
Jelly ,
1211 byteSeperti jawaban CJam Peter Taylor , ini menghitung suku ke- n dari urutan naik / turun Euler jika n adalah kasus ganjil dan khusus bahkan n sebagai 0 .
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Sage, 26 byte
Seperti solusi lain dalam bahasa yang berorientasi matematika, fungsi ini menghitung
n
turunannyatan(x)
dan mengevaluasinya dix = 0
.Cobalah online
sumber
J,
1513 byteAda juga builtin
t:
yang menghitung koefisien ke- n dari fungsi pembangkit eksponensial tan (x) .Terima kasih kepada @ Leaky Nun karena mengingatkan saya pada adverbia seri Taylor dalam J yang menghemat 2 byte.
Alternatif untuk 15 byte .
Pendekatan lain adalah untuk menghitung n th turunan dari tan (x) dan mengevaluasinya di x = 0 .
Catatan: Dalam J , jumlah memori yang digunakan oleh fungsi turunan
d.
tumbuh dengan cepat ketika n melewati 10.Pemakaian
Penjelasan
sumber
Julia,
3937 byteDisimpan 2 byte berkat Dennis.
Bukan solusi Julia terpendek (lihat solusi Dennis), tetapi yang ini dilakukan murni menggunakan logika derivatif ... dalam bentuk matriks.
Pada dasarnya, ia menggunakan fakta bahwa turunan dari tan (x) adalah 1 + tan (x) ^ 2. Jadi karena turunan dari setiap kekuatan tan (x), katakan tan (x) ^ k, adalah k tan (x) ^ (k-1) tan (x) '= k tan (x) ^ (k-1) + k tan (x) ^ (k + 1), kita dapat menggunakan kekuatan matriks sederhana pada matriks dengan nilai yang sesuai untuk menghasilkan ekspansi, dengan baris atau kolom kedua (tergantung pada konstruksi) memegang turunan dari tan (x ) diri.
Jadi kita hanya perlu menemukan konstanta dalam ekspresi yang dihasilkan, dan itulah nilai pertama pada baris atau kolom yang sesuai.
sumber
!n=(spdiagm((0:n,1:n+1),(1,-1))^n)[2]
harus bekerja.spdiagm
akan membiarkan gaya konstruksi itu - mencobanya dengandiagm
, tetapi tentu saja itu tidak berhasil.JavaScript (ES6),
12745 byteSolusi Port of xnor.
sumber
Haskell,
9593 byteIni pada dasarnya merupakan implementasi dari formula umum dengan beberapa optimasi kecil.
sumber
MATLAB dengan Symbolic Toolbox, 84 byte
Contoh berjalan:
sumber
Haskell (terlalu banyak byte)
Hanya menggunakan operasi pada daftar dan Raymond Manzoni ini hasil :
Sayangnya, ini melimpah untuk nilai sederhana
n
, karena menggunakanInt
nilai. Saya akan mencoba untuk memperbaiki masalah menggunakanInteger
nilai. Sampai saat itu, saran dipersilahkan.sumber
Aksioma, 46 byte
kode untuk pengujian dan hasil
sumber