Euler Sayıları Çıktısı


28

Negatif olmayan bir tamsayı verildiğinde , Euler numarasını verin ( OEIS A122045 ).n,ninci

Tüm tek indeksli Euler sayılarıÇift indeksli Euler sayıları aşağıdaki formülle hesaplanabilir ( hayali birime karşılık gelir): 0.ben-1

E2n=benΣk=12n+1Σj=0k(kj)(-1)j(k-2j)2n+12kbenkk.

kurallar

  • n , negatif olmayan bir tamsayı olacak, böylece Euler numarası, diliniz için temsil edilebilir tam sayı aralığında olacak.ninci

Test Kılıfları

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

1
@ donbright Bir parantez kümesini özlüyorsunuz : wolframalpha.com/input/… - bununla birlikte, iki summan da eklendiğinde -i/2elde edilen verimdir -i. Bunu itoplamın dışına çarpın ve anlayın 1.
Mego

Yanıtlar:



13

J , 10 bayt

(1%6&o.)t:

Çevrimiçi deneyin!

Üstel üretim fonksiyonunun sech (x) tanımını kullanır.


J, üretim fonksiyonunu elde etmek için sembolik analiz yapar mı? N = 30 için bile kayan nokta hataları ile karşılaşmaz.
orlp

@ orlp Dahili olarak ne yaptığından emin değilim, ancak J, bir fiil alt kümesi için Taylor serisini bilir . Bu fiillerin bir kombinasyonunu kullanarak tanımlayabileceğiniz herhangi bir işlev , gf ve egf için nerede t.veya t:nerede geçerli olacaktır. Meraklı bir not, tan (x) 'in desteklenmediği, ancak sin (x) / cos (x)' in olduğudur.
miller


11

Akçaağaç, 5 bayt

euler

Yerleşikler için hurra?


4
Matematiğin bir matematik problemi için çok ayrıntılı olduğu zamanları seviyorum ...
theonlygusti

11

Maxima , 5 bayt / 42 bayt

Maxima yerleşik olarak bulunmaktadır:

euler

Çevrimiçi deneyin!

Aşağıdaki çözüm yerleşik olarak yukarıdan yapılmasını gerektirmez ve euler numaralarını ilk olarak tanımlayan formülü kullanır.

Biz temelde serisi genişletilmesi n'inci katsayısı arıyoruz 1/cosh(t) = sech(t)(en fazla n!)

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

Çevrimiçi deneyin!


9

Mathematica, yerleşik, 18 bayt

@ Rahnema1 formülünü kullanarak :

2Im@PolyLog[-#,I]&

21 bayt:

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

5

Python 2.7, 46 bayt

Scipy kullanmak

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

5

Perl 6 , 78 bayt

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

İteratif formülü buradan kullanır :

En=1-Σk=0n-1[Ek2(n-1-k)(nk)]

Nasıl çalışır

Genel yapı, sonsuz bir dizinin, tekrar tekrar çağrılan ve değişkendeki dizinin önceki tüm değerlerini alan bir ifade ile üretildiği bir lambdadır @Eve daha sonra bu dizilim, lambda argümanı ile dizine alınır:

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

Dizinin her adımı için çağrılan ifade:

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 bayt

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

Çevrimiçi deneyin!

EnF(n,ben)-F(n,ben)nF'(n,ben)=(-1)nF(n,ben)FF'

F'(n,ben)=(ben-n-1)F'(n-1,ben-2)+(ben+1)F'(n-1,ben)

JavaScript (Node.js) , 70 46 bayt

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

Çevrimiçi deneyin!

Henüz JavaScript yanıtı bulamamış olduğum için şaşırdım, deneyeceğim.

sech(x)

açıklama

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

dnSdtn=Σben=0nF(n,ben)Tn-benSben+1

dTdt=S2dSdt=-TS

ddt(TbirSb)=birTbir-1(S2)(Sb)+bSb-1(-TS)(Tbir)=birTbir-1Sb+2-bTbir+1Sb

b=ben+1bir=n-ben

ddt(Tn-benSben+1)=(n-ben)Tn-ben-1Sben+3-(ben+1)Tn-ben+1Sben+1=(n-ben)T(n+1)-(ben+2)S(ben+2)+1-(ben+1)T(n+1)-benSben+1

F(n,ben)F(n+1,ben+2)F(n+1,ben)F(n,ben)F(n-1,ben-2)F(n-1,ben)

F(n,ben)=(n-ben+1)F(n-1,ben-2)-(ben+1)F(n-1,ben)

F(0,0)=1F(0,ben)=0ben0

Kodun ilgili kısmı a?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b, yukarıdaki yineleme formülünü kullanarak tam olarak hesaplanıyor. İşte dağılım:

-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)

T(0)=0S(0)=1EnSn+1dnSdtnF(n,n)

F(0,0)F(n,ben)=0ben<0benEn=0nbenn0bennben=n+1n-ben+1=n-(n+1)+1=00bennF(n,ben)=0ben>n

Uzantıları

Kod, üç ilgili diziyi daha hesaplamak için değiştirilebilir:

Teğet Numaralar (46 bayt)

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

Secant Numaraları (45 bayt)

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

Euler Zikzak Numaraları (48 bayt)

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

3

Befunge, 115 bayt

Bu sadece ilk 16 Euler sayısının (örneğin, E 0 ila E 15 ) kodlanmış bir setini destekler . Bunun ötesinde bir şey zaten 32-bit Befunge değerine sığmaz.

&: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+*:*

Çevrimiçi deneyin!

Ayrıca, meydan okumadaki formülün eksiksiz bir uygulamasını da yaptım, ancak neredeyse iki katı boyutta ve 64-bit tercüman olmasına rağmen hala TIO'daki ilk 16 değerle sınırlı.

<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

Çevrimiçi deneyin!

Bu algoritmadaki problem, serideki ara değerlerin toplamdan çok daha erken taşmasıdır. 32 bitlik bir tercümanda sadece ilk 10 değeri idare edebilir (örn. E 0 ila E 9 ). Bidom kullanan tercümanlar çok daha iyisini yapmalıdır - PyFunge ve Befungee en az E 30'a kadar her ikisini de idare edebilir .


1

Python2, (rasyonel rasyonel), 153 bayt

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)])))

Bu çok yetersizdir ancak temel semy işlevlerini kullanmaya ve kayan noktalardan kaçınmaya çalışıyor. Beni yukarıda listelenen orijinal formüle göre ayarladığınız için teşekkürler @Mego. Tips'den Python'da golf oynamak için @ xnor'ın "iki döngüsünü birleştir" gibi bir şey kullanmaya çalıştım


1
import*Bir bayt kaydetmek için yapabilirsiniz (aradaki boşluğu kaldırabilirsiniz). Ayrıca, bir şekilde sayıyı bir girdi olarak almanız gerekir (girişin değişkende olduğunu varsayan snippet'lere izin verilmez).
FlipTack

1

CJam (34 bayt)

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

E (0) - E (19) yazdıran çevrimiçi demo . Bu anonim bir bloktur (fonksiyon).

Uygulama, Shieru Akasoto'nun yinelemesini ödünç alır ve bir kerede tüm satırları manipüle ederek daha CJam dostu bir tarzda yeniden yazar.

teşrih

{           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

Aksiyom, 5 bayt

euler

OEIS A122045; bu 57 bayttır

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

test kodu ve sonuçları

(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 karakter, 84 bayt

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

"Smls" den gösterilen formülü izleyin, test edin:

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

Son dava, sonuç olarak büyük bir rasyonel döndürür çünkü 20x (büyük rasyonel 20/1) girerim ve 20.0 sanırım 20.0 64 bit yüzer ...

  E 20x
370371188237525 

Yakında 0 gelirse daha hızlı olur, ancak biraz daha uzun olurdu (50 karakter):

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

Söz konusu tanım kullanılırsa daha hızlı olur (ve biraz daha uzun 75 karakter olur):

  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 

Bunun üstündeki sonuç, sadece gerçek kısmı olan tek bir karmaşık sayıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.