オイラー数を出力する


28

負でない整数n,nth オイラー数OEIS A122045)を出力します。

奇数インデックスのオイラー数はすべて0.偶数インデックスオイラー数は、下記式(で計算することができるi1は虚数単位を指します):

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

ルール

  • nは、nthオイラー数が言語の表現可能な整数の範囲内での整数になります。

テストケース

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

1
@donbrightあなたは括弧のセット不足している:wolframalpha.com/input/... -それとを、2つの加数はともに-i/2歩留まり、-i追加したとき。それにi合計の外側を掛けると、が得られ1ます。
メゴ

回答:


18

Mathematica、6バイト

EulerE

-咳-


9
タイトルを見たとき、私はすぐに「確かにMathematicaにはこれが組み込まれているに違いない」と思った。
-HyperNeutrino

12
それはほとんどすべてのタイトルに当てはまります... 画像内でヤギを検出すること
ルイス・メンドー

GoatImageQ過小評価
グレッグマーティン

1
これを説明できますか?編集: これは冗談でした。
魔法のタコUr

13

J、10バイト

(1%6&o.)t:

オンラインでお試しください!

指数生成関数sech(x)の定義を使用します。


Jはシンボリック分析を行って生成関数を取得しますか?n = 30の場合でも、浮動小数点エラーは発生しません。
orlp

@orlp内部で何をするのかわかりませんが、J は動詞のサブセットのテイラー級数を知っています。これらの動詞の組み合わせを使用して定義できるすべての関数は、gfとegfで有効であるt.t:、gfとegfです。
マイル


11

メープル、5バイト

euler

組み込みの万歳?


4
数学が数学の問題に対して冗長すぎる場合は、それを愛します
...-theonlygusti

11

マキシマ、5バイト/ 42バイト

Maximaには以下が組み込まれています:

euler

オンラインでお試しください!

次のソリューションでは、上記の組み込みは不要で、オイラー番号を最初に定義した式を使用しています。

私たちは基本的に、1/cosh(t) = sech(t)(までn!)の級数展開のn番目の係数を探しています

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

オンラインでお試しください!




5

Perl 6、78バイト

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

ここから反復式使用します

En=1k=0n1[Ek2n1knk]

使い方

一般的な構造は、繰り返し呼び出され、変数内のシーケンスの以前の値をすべて取得する式によって無限シーケンスが生成されるラムダであり、@Eそのシーケンスはラムダ引数でインデックス付けされます:

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

シーケンスの各ステップで呼び出される式は次のとおりです。

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バイト

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

オンラインでお試しください!

すべてに有効 En 値(必要に応じて)、ただし Fn 一般的に(出力 Fn 奇妙な ns。)コードを修正して、出力を Fn=1nFn どこで F以下のように定義されます。具体的には、F

Fn=n1Fn12++1Fn1

JavaScript(Node.js)70 46バイト

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

オンラインでお試しください!

JavaScriptの答えがまだ見つからないことに驚いたので、試してみます。

コードは基本的な数学のみで構成されていますが、コードの背後にある数学には微積分が必要です。再帰公式は、の導関数の展開から導出されますsechバツ 異なる注文の。

説明

ここでは、便利な表記法を使用します。させてTn:=tanhnt そして Sn:=sechnt。それから

dnSdtn==0nFnTnS+1

以来 dTdt=S2 そして dSdt=TS、我々はそれを推測することができます

ddtTaSb=aTa1S2Sb+bSb1TSTa=aTa1Sb+2bTa+1Sb

させて b=+1 そして a=n、上記の関係を次のように書き換えることができます

ddtTnS+1=nTn1S+3+1Tn+1S+1=nTn+1+2S+2+1+1Tn+1S+1

あれは、 Fn 両方に貢献します Fn+1+2 そして Fn+1。その結果、私たちは書くことができますFn の面では Fn12 そして Fn1

Fn=n+1Fn12+1Fn1

初期状態で F00=1 そして F0=0 どこで 0

コードの関連部分はa?-F(--a,b)*++b+F(a,b-=3)*(a-b):+!b、上記の繰り返し式を使用して正確に計算しています。内訳は次のとおりです。

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

以来 T0=0 そして S0=1En の係数に等しい Sn+1 の拡大 dnSdtnFnn

その枝のために F00 決して到達できないため、繰り返しは常に0で終了するため、 Fn=0 どこで <0 または 奇妙です。特に後者は、En=0 すべての奇妙な ns。でもsよりも厳密に大きい n、再発により最終的には 0n ある時点で発生しますが、そのステップの前に、 =n+1、および繰り返し式は、その時点で値が0でなければならないことを示しています(最初の項が乗算されるため n+1=nn+1+1=0、および2番目の項は、の「三角形」から遠い 0n)。結果として、Fn=0 どこで >n。これで、アルゴリズムの妥当性の証明が完了しました。

拡張機能

コードを変更して、さらに3つの関連シーケンスを計算できます。

正接数(46バイト)

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

Secant Numbers(45バイト)

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

オイラージグザグ数(48バイト)

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

3

Befunge、115バイト

これは、単に最初の16のオイラー数(すなわちEのハードコードされた一連のサポート0 Eまで15)。それを超えるものは、とにかく32ビットのBefunge値に収まりません。

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

オンラインでお試しください!

チャレンジで提供された式の完全な実装も行いましたが、サイズはほぼ2倍であり、TIOの最初の16個の値に制限されています(64ビットインタープリターであっても)。

<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

オンラインでお試しください!

このアルゴリズムの問​​題は、系列の中間値が合計よりもはるかに早くオーバーフローすることです。32ビットにそれが最初の10の値を扱うことができるインタプリタ(すなわち、E 0 Eに9)。ただし、bignumを使用するインタープリターは、PyFungeBefungeeの両方が少なくともE 30まで処理できます。


1

Python2(シンボリック有理数)、153バイト

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

これは非常に最適ではありませんが、基本的なsympy関数を使用して浮動小数点を回避しようとしています。上記の元の式をまっすぐに設定してくれてありがとう@Mego。Pythonでのゴルフのヒントから@xnorの「2つのループを組み合わせる」ようなものを使用しようとしました。


1
あなたは行うことができますimport*バイトを保存するために(間にスペースを削除します)。また、何らかの方法で数値を入力として受け取る必要があります(入力が変数にあると想定するスニペットは許可されません)。
FlipTack

1

CJam(34バイト)

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

E(0)〜E(19)を印刷するオンラインデモ。これは匿名ブロック(関数)です。

実装では、赤sしえるの再発を借用し、よりCJamフレンドリーなスタイルに書き換え、一度に行全体を操作します。

解剖

{           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

公理、5バイト

euler

OEIS A122045の場合; これは57バイトです

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

テストコードと結果

(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文字、84バイト

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

「smls」から示された式に従って、テストします。

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

最後のケースは、20.0 float 64ビットと思うので20ではなく20x(大きな合理的20/1)を入力するため、結果として1つの大きな合理的を返します...

  E 20x
370371188237525 

すぐに0を返すと、より速くなりますが、もう少し長くなります(50文字)。

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

問題の定義を使用すると、より高速になります(そして、もう少し長い75文字になります)。

  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 

上記の結果は、実数部のみを持つ1つの複素数です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.