Diberikan bilangan bulat non-negatif output nomor Euler ( Oei A122045 ).
Semua angka Euler yang diindeks ganjil adalahAngka Euler yang diindeks genap dapat dihitung dengan rumus berikut ( merujuk ke unit imajiner):
Aturan
- akan menjadi bilangan bulat non-negatif sehingga nomor Euler berada dalam kisaran integer yang dapat diwakili untuk bahasa Anda.
Uji Kasus
0 -> 1
1 -> 0
2 -> -1
3 -> 0
6 -> -61
10 -> -50521
20 -> 370371188237525
-i/2
, yang menghasilkan-i
ketika ditambahkan. Kalikan itu dengan bagiani
luar penjumlahan, dan Anda dapatkan1
.Jawaban:
Mathematica, 6 byte
-batuk-
sumber
GoatImageQ
kurang dihargaiJ , 10 byte
Cobalah online!
Menggunakan definisi untuk fungsi penghasil eksponensial, sech (x).
sumber
t.
atau dit:
mana gf dan egf Catatan aneh adalah bahwa tan (x) tidak didukung tetapi sin (x) / cos (x) adalah.Pari / GP , 32 byte
Cobalah online!
sumber
Maple, 5 byte
Hore untuk builtin?
sumber
Maksima , 5 byte / 42 byte
Maxima memiliki bawaan:
Cobalah online!
Solusi berikut ini tidak memerlukan bawaan dari atas, dan menggunakan rumus yang awalnya mendefinisikan angka euler.
Kami pada dasarnya mencari koefisien ke-n dari ekspansi seri
1/cosh(t) = sech(t)
(hinggan!
)Cobalah online!
sumber
Mathematica, tanpa built-in, 18 byte
Menggunakan rumus @ rahnema1 :
21 byte:
sumber
Python 2.7, 46 byte
Menggunakan scipy.
sumber
Perl 6 , 78 byte
Gunakan rumus berulang dari sini :
Bagaimana itu bekerja
Struktur umum adalah lambda di mana urutan yang tak terbatas dihasilkan, oleh ekspresi yang disebut berulang kali dan mendapatkan semua nilai sebelumnya dari urutan dalam variabel
@E
, dan kemudian urutan itu diindeks dengan argumen lambda:Ekspresi yang dipanggil untuk setiap langkah dari urutan, adalah:
sumber
Maxima, 29 byte
Cobalah secara Online!
Dua kali bagian imajiner fungsi polilogaritma keteraturan
-n
dengan argumeni
[1]sumber
JavaScript (Node.js) ,
4645 byteCobalah online!
Berlaku untuk semua nilai (sesuai kebutuhan), tetapi tidak untuk secara umum (output untuk odd s.) Kode dimodifikasi untuk mengurangi satu byte dengan mengubah output ke di mana didefinisikan sebagai berikut. Secara khusus, rumus perulangan untuk adalahEn F(n,i) −F(n,i) n F′(n,i)=(−1)nF(n,i) F F′ F′(n,i)=(i−n−1)F′(n−1,i−2)+(i+1)F′(n−1,i)
JavaScript (Node.js) ,
7046 byteCobalah online!
Terkejut belum menemukan jawaban JavaScript, jadi saya akan mencoba.
Kode hanya terdiri dari matematika dasar, tetapi matematika di belakang kode membutuhkan kalkulus. Rumus rekursi berasal dari perluasan turunan dari dari pesanan yang berbeda.sech(x)
Penjelasan
Di sini saya akan menggunakan beberapa notasi yang mudah. Misalkan dan . Lalu kita punyaTn:=tanhn(t) Sn:=sechn(t)
Karena dan , kita dapat menyimpulkan bahwadTdt=S2 dSdt=−TS
Misalkan dan , kita dapat menulis ulang relasi di atas sebagaib=i+1 a=n−i
Yaitu, berkontribusi pada dan . Sebagai hasilnya, kita dapat menulis dalam bentuk dan :F(n,i) F(n+1,i+2) F(n+1,i) F(n,i) F(n−1,i−2) F(n−1,i)
dengan kondisi awal dan mana .F(0,0)=1 F(0,i)=0 i≠0
Bagian terkait dari kode
a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b
persis menghitung menggunakan rumus perulangan di atas. Berikut rinciannya:Karena dan , sama dengan koefisien dalam perluasan , yaitu .T(0)=0 S(0)=1 En Sn+1 dnSdtn F(n,n)
Untuk cabang yang tidak pernah dapat dijangkau, perulangan selalu berakhir pada 0, jadi mana atau adalah ganjil. Yang terakhir, khususnya, menyiratkan bahwa untuk semua odd s. Untuk bahkan benar-benar lebih besar dari , perulangan pada akhirnya dapat memungkinkan terjadi pada beberapa titik, tetapi sebelum langkah itu harus mencapai titik di mana , dan rumus perulangan menunjukkan bahwa nilai harus 0 pada titik itu (karena suku pertama dikalikan dengan , dan suku kedua lebih jauh dari "segitiga" dariF(0,0) F(n,i)=0 i<0 i En=0 n i n 0≤i≤n i=n+1 n−i+1=n−(n+1)+1=0 0≤i≤n ). Akibatnya, mana . Ini melengkapi bukti validitas algoritma.F(n,i)=0 i>n
Ekstensi
Kode dapat dimodifikasi untuk menghitung tiga urutan terkait:
Nomor Tangen (46 byte)
Nomor Seri (45 byte)
Nomor Euler Zigzag (48 byte)
sumber
Befunge, 115 byte
Ini hanya mendukung satu set kode 16 angka Euler pertama (yaitu E 0 hingga E 15 ). Apa pun yang melampaui itu tidak akan cocok dengan nilai Befunge 32-bit.
Cobalah online!
Saya juga telah melakukan implementasi penuh dari formula yang disediakan dalam tantangan, tetapi ukurannya hampir dua kali lipat, dan itu masih terbatas pada 16 nilai pertama pada TIO, meskipun itu adalah interpreter 64-bit.
Cobalah online!
Masalah dengan algoritma ini adalah bahwa nilai-nilai perantara dalam seri overflow jauh lebih cepat daripada totalnya. Pada interpreter 32-bit, ia hanya dapat menangani 10 nilai pertama (yaitu E 0 hingga E 9 ). Juru bahasa yang menggunakan bignum harus melakukan jauh lebih baik - PyFunge dan Befungee keduanya bisa menangani setidaknya hingga E 30 .
sumber
Python2, (sympy rasional), 153 byte
Ini sangat suboptimal tetapi sedang mencoba untuk menggunakan fungsi sympy dasar dan menghindari floating point. Terima kasih @Mego karena telah meluruskan saya pada formula asli yang tercantum di atas. Saya mencoba menggunakan sesuatu seperti @ xnor "kombinasikan dua loop" dari Tips untuk bermain golf dengan Python
sumber
import*
(menghapus spasi di antaranya) untuk menghemat satu byte. Selain itu, Anda perlu mengambil nomor sebagai input, entah bagaimana (potongan yang menganggap input dalam variabel tidak diizinkan).CJam (34 byte)
Demo online yang mencetak E (0) hingga E (19). Ini adalah blok anonim (fungsi).
Implementasi meminjam kekambuhan Shieru Akasoto dan menulis ulang dengan gaya yang lebih ramah CJam, memanipulasi seluruh baris sekaligus.
Pembedahan
sumber
Bahasa Wolfram (Mathematica) ,
4746 byteTanpa menggunakan fungsi khusus:
Cobalah online!
sumber
Aksioma, 5 byte
untuk OEIS A122045; ini adalah 57 byte
kode uji dan hasil
sumber
APL (NARS), 42 karakter, 84 byte
Ikuti formula yang ditunjukkan dari "smls", tes:
kasus terakhir mengembalikan satu rasional besar sebagai hasilnya karena saya memasukkan 20x (20/1 rasional besar) dan bukan 20 karena saya pikir 20.0 float 64 bit ...
Akan lebih cepat jika seseorang mengembalikan 0 segera tetapi akan menjadi sedikit lebih panjang (50 karakter):
akan lebih cepat jika digunakan definisi pada pertanyaan (dan akan menjadi 75 karakter sedikit lebih panjang):
Hasil di atasnya adalah satu bilangan kompleks yang hanya memiliki bagian nyata.
sumber