Xuất số Euler


28

Cho số nguyên n, không âm , xuất ra số Euler thứnth ( OEIS A122045 ).

Tất cả các số Euler được lập chỉ mục lẻ là 0.Những con số Euler thậm chí lập chỉ mục có thể được tính theo công thức sau ( i1 đề cập đến đơn vị ảo):

E2n=ik=12n+1j=0k(kj)(1)j(k2j)2n+12kikk.

Quy tắc

  • n sẽ là một số nguyên không âm sao chosố Euler thứnth nằm trong phạm vi số nguyên có thể biểu thị cho ngôn ngữ của bạn.

Các trường hợp thử nghiệm

0 -> 1
1 -> 0
2 -> -1
3 -> 0
6 -> -61
10 -> -50521
20 -> 370371188237525

1
@donbright Bạn đang thiếu một bộ dấu ngoặc đơn: wolframalpha.com/input/, - với điều đó, hai triệu hồi là cả hai -i/2, sẽ sinh ra -ikhi thêm vào. Nhân số đó với ibên ngoài của tổng kết, và bạn nhận được 1.
Mego

Câu trả lời:


18

Toán học, 6 byte

EulerE

-ho-


9
Khi tôi nhìn thấy tiêu đề, tôi nghĩ ngay rằng "Chắc chắn Mathicala phải có nội dung cho việc này".
HyperNeutrino

12
Điều đó áp dụng cho hầu hết mọi tiêu đề ... thậm chí phát hiện dê trong hình ảnh
Luis Mendo

GoatImageQđược đánh giá thấp
Greg Martin

1
Bạn có thể giải thích điều này? Chỉnh sửa: đây là một trò đùa.
Bạch tuộc ma thuật Urn

13

J , 10 byte

(1%6&o.)t:

Hãy thử trực tuyến!

Sử dụng định nghĩa cho hàm tạo hàm mũ sech (x).


J có phân tích biểu tượng để có được hàm tạo không? Nó không chạy vào các lỗi dấu phẩy động ngay cả với n = 30.
orlp

@orlp Tôi không chắc nó làm gì trong nội bộ, nhưng J biết loạt Taylor cho một tập hợp động từ . Bất kỳ hàm nào bạn có thể xác định bằng cách sử dụng kết hợp các động từ đó sẽ hợp lệ cho t.hoặc t:ở đâu là gf và egf Một lưu ý tò mò là tan (x) không được hỗ trợ nhưng sin (x) / cos (x) là.
dặm


11

Maple, 5 byte

euler

Thắng lợi cho tích hợp?


4
Yêu nó khi toán học quá dài dòng cho một vấn đề toán học ...
theonlygusti

11

Tối đa , 5 byte / 42 byte

Maxima được tích hợp sẵn trong:

euler

Hãy thử trực tuyến!

Giải pháp sau đây không yêu cầu tích hợp từ phía trên và sử dụng công thức xác định ban đầu các số euler.

Về cơ bản, chúng tôi đang tìm kiếm hệ số thứ n của việc mở rộng chuỗi 1/cosh(t) = sech(t)(lên đến n!)

f(n):=coeff(taylor(sech(x),x,0,n)*n!,x,n);

Hãy thử trực tuyến!


9

Mathicala, không tích hợp, 18 byte

Sử dụng công thức của @ rahnema1 :

2Im@PolyLog[-#,I]&

21 byte:

Sech@x~D~{x,#}/.x->0&

5

Python 2.7, 46 byte

Sử dụng scipy.

from scipy.special import*
lambda n:euler(n)[n]

5

Perl 6 , 78 byte

{(->*@E {1-sum @E».&{$_*2**(@E-1-$++)*[*](@E-$++^..@E)/[*] 1..$++}}...*)[$_]}

Sử dụng công thức lặp từ đây :

En=1k=0n1[Ek2(n1k)(nk)]

Làm thế nào nó hoạt động

Cấu trúc chung là một lambda trong đó một chuỗi vô hạn được tạo ra, bởi một biểu thức được gọi lặp lại và nhận tất cả các giá trị trước đó của chuỗi trong biến @E, và sau đó chuỗi đó được lập chỉ mục với đối số lambda:

{ ( -> *@E {    } ... * )[$_] }

Biểu thức được gọi cho mỗi bước của chuỗi, là:

1 - sum @E».&{              # 1 - ∑
    $_                      # Eₙ
    * 2**(@E - 1 - $++)     # 2ⁿ⁻ˡ⁻ᵏ
    * [*](@E - $++ ^.. @E)  # (n-k-1)·...·(n-1)·n
    / [*] 1..$++            # 1·2·...·k
}


4

JavaScript (Node.js) , 46 45 byte

F=(a,b=a)=>a?(b+~a)*F(--a,b-2)+F(a,b)*++b:+!b

Hãy thử trực tuyến!

EnF(n,i)F(n,i)nF(n,i)=(1)nF(n,i)FF

F(n,i)=(in1)F(n1,i2)+(i+1)F(n1,i)

JavaScript (Node.js) , 70 46 byte

F=(a,b=a)=>a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b

Hãy thử trực tuyến!

Ngạc nhiên khi không tìm thấy câu trả lời JavaScript nào, vì vậy tôi sẽ thử.

sech(x)

Giải trình

Tn:=tanhn(t)Sn:=sechn(t)

dnSdtn=i=0nF(n,i)TniSi+1

dTdt=S2dSdt=TS

ddt(TaSb)=aTa1(S2)(Sb)+bSb1(TS)(Ta)=aTa1Sb+2bTa+1Sb

b=i+1a=ni

ddt(TniSi+1)=(ni)Tni1Si+3(i+1)Tni+1Si+1=(ni)T(n+1)(i+2)S(i+2)+1(i+1)T(n+1)iSi+1

That is, F(n,i) contributes to both F(n+1,i+2) and F(n+1,i). As a result, we can write F(n,i) in terms of F(n1,i2) and F(n1,i):

F(n,i)=(ni+1)F(n1,i2)(i+1)F(n1,i)

with initial condition F(0,0)=1 and F(0,i)=0 where i0.

The related part of the code a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b is exactly calculating using the above recurrence formula. Here's the breakdown:

-F(--a,b)                // -F(n-1, i)                  [ a = n-1, b = i   ]
*++b                     // *(i+1)                      [ a = n-1, b = i+1 ]
+F(a,b-=3)               // +F(n-1, i-2)                [ a = n-1, b = i-2 ]
*(a-b)                   // *((n-1)-(i-2))              [ a = n-1, b = i-2 ]
                         // which is equivalent to *(n-i+1)

Since T(0)=0 and S(0)=1, En equals the coefficient of Sn+1 in the expansion of dnSdtn, which is F(n,n).

For branches that F(0,0) can never be reached, the recurrences always end at 0, so F(n,i)=0 where i<0 or i is odd. The latter one, particularly, implies that En=0 for all odd ns. For even is strictly larger than n, the recurrence may eventually allow 0in to happen at some point, but before that step it must reach a point where i=n+1, and the recurrence formula shows that the value must be 0 at that point (since the first term is multiplied by ni+1=n(n+1)+1=0, and the second term is farther from the "triangle" of 0in). As a result, F(n,i)=0 where i>n. This completes the proof of the validity of the algorithm.

Extensions

The code can be modified to calculate three more related sequences:

Tangent Numbers (46 bytes)

F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!~b

Secant Numbers (45 bytes)

F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):+!b

Euler Zigzag Numbers (48 bytes)

F=(a,b=a)=>a?F(--a,b)*++b+F(a,b-=3)*(a-b):!b+!~b

3

Befunge, 115 bytes

This just supports a hardcoded set of the first 16 Euler numbers (i.e. E0 to E15). Anything beyond that wouldn't fit in a 32-bit Befunge value anyway.

&:2%v
v@.0_2/:
_1.@v:-1
v:-1_1-.@
_5.@v:-1
v:-1_"="-.@
_"}$#"*+.@v:-1
8**-.@v:-1_"'PO"
"0h;"3_"A+y^"9*+**.@.-*8+*:*

Try it online!

I've also done a full implementation of the formula provided in the challenge, but it's nearly twice the size, and it's still limited to the first 16 values on TIO, even though that's a 64-bit interpreter.

<v0p00+1&
v>1:>10p\00:>20p\>010g20g2*-00g1>-:30pv>\:
_$12 0g2%2*-*10g20g110g20g-240pv^1g03:_^*
>-#1:_!>\#<:#*_$40g:1-40p!#v_*\>0\0
@.$_^#`g00:<|!`g01::+1\+*/\<
+4%1-*/+\2+^>$$10g::2>\#<1#*-#2:#\_$*\1

Try it online!

The problem with this algorithm is that the intermediate values in the series overflow much sooner than the total does. On a 32-bit interpreter it can only handle the first 10 values (i.e. E0 to E9). Interpreters that use bignums should do much better though - PyFunge and Befungee could both handle at least up to E30.


1

Python2, (sympy rational), 153 bytes

from sympy import *
t=n+2 
print n,re(Add(*map(lambda (k,j):I**(k-2*j-1)*(k-2*j)**(n+1)*binomial(k,j)/(k*2**k),[(c/t+1,c%t) for c in range(0,t**2-t)])))

This is very suboptimal but it's trying to use basic sympy functions and avoid floating point. Thanks @Mego for setting me straight on the original formula listed above. I tried to use something like @xnor's "combine two loops" from Tips for golfing in Python


1
You can do import* (remove the space in between) to save a byte. Also, you need to take the number as an input somehow (snippets which assume the input to be in a variable are not allowed).
FlipTack

1

CJam (34 bytes)

{1a{_W%_,,.*0+(+W%\_,,:~.*.+}@*W=}

Online demo which prints E(0) to E(19). This is an anonymous block (function).

The implementation borrows Shieru Akasoto's recurrence and rewrites it in a more CJam friendly style, manipulating entire rows at a time.

Dissection

{           e# Define a block
  1a        e#   Start with row 0: [1]
  {         e#   Loop...
    _W%     e#     Take a copy and reverse it
    _,,.*   e#     Multiply each element by its position
    0+(+    e#     Pop the 0 from the start and add two 0s to the end
    W%      e#     Reverse again, giving [0 0 (i-1)a_0 (i-2)a_1 ... a_{i-2}]
    \       e#     Go back to the other copy
    _,,:~.* e#     Multiply each element by -1 ... -i
    .+      e#     Add the two arrays
  }         e#
  @*        e#   Bring the input to the top to control the loop count
  W=        e#   Take the last element
}


0

Axiom, 5 bytes

euler

for OEIS A122045; this is 57 bytes

g(n:NNI):INT==factorial(n)*coefficient(taylor(sech(x)),n)

test code and results

(102) -> [[i,g(i)] for i in [0,1,2,3,6,10,20]]
   (102)
   [[0,1],[1,0],[2,- 1],[3,0],[6,- 61],[10,- 50521],[20,370371188237525]]

(103) -> [[i,euler(i)] for i in [0,1,2,3,6,10,20]]
   (103)
   [[0,1],[1,0],[2,- 1],[3,0],[6,- 61],[10,- 50521],[20,370371188237525]]

0

APL(NARS), 42 chars, 84 bytes

E←{0≥w←⍵:1⋄1-+/{(⍵!w)×(2*w-1+⍵)×E⍵}¨¯1+⍳⍵}

Follow the formula showed from "smls", test:

  E 0
1
  E 1
0
  E 3
0
  E 6
¯61
  E 10
¯50521

the last case return one big rational as result because i enter 20x (the big rational 20/1) and not 20 as i think 20.0 float 64 bit...

  E 20x
370371188237525 

It would be more fast if one return 0 soon but would be a little more long (50 chars):

  E←{0≥w←⍵:1⋄0≠2∣w:0⋄1-+/{(⍵!w)×(2*w-1+⍵)×E⍵}¨¯1+⍳⍵}
  E 30x
¯441543893249023104553682821 

it would be more fast if it is used the definition on question (and would be a little more long 75 chars):

  f←{0≥⍵:1⋄0≠2∣⍵:0⋄0J1×+/{+/⍵{⍺÷⍨(0J2*-⍺)×(⍵!⍺)×(¯1*⍵)×(⍺-2×⍵)*n}¨0..⍵}¨⍳n←1+⍵}
  f 0
1
  f 1
0
  f 3
0
  f 6
¯61J0 
  f 10
¯50521J¯8.890242766E¯9 
  f 10x
¯50521J0 
  f 20x
370371188237525J0 
  f 30x
¯441543893249023104553682821J0 
  f 40x
14851150718114980017877156781405826684425J0 
  f 400x
290652112822334583927483864434329346014178100708615375725038705263971249271772421890927613982905400870578615922728
  107805634246727371465484012302031163270328101126797841939707163099497536820702479746686714267778811263343861
  344990648676537202541289333151841575657340742634189439612727396128265918519683720901279100496205972446809988
  880945212776281115581267184426274778988681851866851641727953206090552901049158520028722201942987653512716826
  524150450130141785716436856286094614730637618087804268356432570627536028770886829651448516666994497921751407
  121752827492669601130599340120509192817404674513170334607613808215971646794552204048850269569900253391449524
  735072587185797183507854751762384660697046224773187826603393443429017928197076520780169871299768968112010396
  81980247383801787585348828625J0 

The result above it is one complex number that has only the real part.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.