ベルヌーイ数


23

ベルヌーイ数(具体的には、第二のベルヌーイ数)は、次の再帰的定義によって定義されます。

2番目のベルヌーイ数

どこmCk意味の組み合わせを

m入力として負でない整数を指定すると、10進数表現またはm2番目のベルヌーイ数の小数部を出力します。10進表現を出力する場合、少なくとも6桁の小数点(小数点以下の桁)の精度が必要であり、小数点以下6桁に丸めたときに正確でなければなりません。たとえばm = 20.166666523はに丸められるため、for は許容され0.166667ます。0.166666389はに丸められるため、受け入れられません0.166666。末尾のゼロは省略できます。10進表現には科学表記法を使用できます。

以下は、m小数点以下6桁に丸められた科学表記法で、最大60を含む小数部の入力と期待される出力です。

0 -> 1.000000e+00 (1/1)
1 -> 5.000000e-01 (1/2)
2 -> 1.666667e-01 (1/6)
3 -> 0.000000e+00 (0/1)
4 -> -3.333333e-02 (-1/30)
5 -> 0.000000e+00 (0/1)
6 -> 2.380952e-02 (1/42)
7 -> 0.000000e+00 (0/1)
8 -> -3.333333e-02 (-1/30)
9 -> 0.000000e+00 (0/1)
10 -> 7.575758e-02 (5/66)
11 -> 0.000000e+00 (0/1)
12 -> -2.531136e-01 (-691/2730)
13 -> 0.000000e+00 (0/1)
14 -> 1.166667e+00 (7/6)
15 -> 0.000000e+00 (0/1)
16 -> -7.092157e+00 (-3617/510)
17 -> 0.000000e+00 (0/1)
18 -> 5.497118e+01 (43867/798)
19 -> 0.000000e+00 (0/1)
20 -> -5.291242e+02 (-174611/330)
21 -> 0.000000e+00 (0/1)
22 -> 6.192123e+03 (854513/138)
23 -> 0.000000e+00 (0/1)
24 -> -8.658025e+04 (-236364091/2730)
25 -> 0.000000e+00 (0/1)
26 -> 1.425517e+06 (8553103/6)
27 -> 0.000000e+00 (0/1)
28 -> -2.729823e+07 (-23749461029/870)
29 -> 0.000000e+00 (0/1)
30 -> 6.015809e+08 (8615841276005/14322)
31 -> 0.000000e+00 (0/1)
32 -> -1.511632e+10 (-7709321041217/510)
33 -> 0.000000e+00 (0/1)
34 -> 4.296146e+11 (2577687858367/6)
35 -> 0.000000e+00 (0/1)
36 -> -1.371166e+13 (-26315271553053477373/1919190)
37 -> 0.000000e+00 (0/1)
38 -> 4.883323e+14 (2929993913841559/6)
39 -> 0.000000e+00 (0/1)
40 -> -1.929658e+16 (-261082718496449122051/13530)
41 -> 0.000000e+00 (0/1)
42 -> 8.416930e+17 (1520097643918070802691/1806)
43 -> 0.000000e+00 (0/1)
44 -> -4.033807e+19 (-27833269579301024235023/690)
45 -> 0.000000e+00 (0/1)
46 -> 2.115075e+21 (596451111593912163277961/282)
47 -> 0.000000e+00 (0/1)
48 -> -1.208663e+23 (-5609403368997817686249127547/46410)
49 -> 0.000000e+00 (0/1)
50 -> 7.500867e+24 (495057205241079648212477525/66)
51 -> 0.000000e+00 (0/1)
52 -> -5.038778e+26 (-801165718135489957347924991853/1590)
53 -> 0.000000e+00 (0/1)
54 -> 3.652878e+28 (29149963634884862421418123812691/798)
55 -> 0.000000e+00 (0/1)
56 -> -2.849877e+30 (-2479392929313226753685415739663229/870)
57 -> 0.000000e+00 (0/1)
58 -> 2.386543e+32 (84483613348880041862046775994036021/354)
59 -> 0.000000e+00 (0/1)
60 -> -2.139995e+34 (-1215233140483755572040304994079820246041491/56786730)

リファレンス実装(Python 3):

def factorial(n):
    if n < 1:
        return 1
    else:
        return n * factorial(n - 1)

def combination(m,k):
    if k <= m:
        return factorial(m)/(factorial(k) * factorial(m - k))
    else:
        return 0

def Bernoulli(m):
    if m == 0:
        return 1
    else:
        t = 0
        for k in range(0, m):
            t += combination(m, k) * Bernoulli(k) / (m - k + 1)
        return 1 - t

ルール

  • これはなので、バイト単位の最短コードが優先されます
  • ベルヌーイ数またはベルヌーイ多項式のいずれかのタイプを計算する、組み込みまたは外部ライブラリに含まれる関数を使用することはできません。
  • 答えは、60までのすべての入力に対して正しい出力を提供する必要があります。

リーダーボード

この投稿の下部にあるスタックスニペットは、a)言語ごとの最短ソリューションのリストとして、およびb)リーダーボード全体としての回答からリーダーボードを生成します。

回答が表示されるようにするには、次のマークダウンテンプレートを使用して、見出しから回答を開始してください。

## Language Name, N bytes

N提出物のサイズはどこですか。スコアを改善する場合、古いスコアを打つことで見出しに残すことができます。例えば:

## Ruby, <s>104</s> <s>101</s> 96 bytes

ヘッダーに複数の数字を含める場合(たとえば、スコアが2つのファイルの合計であるか、インタープリターフラグペナルティーを個別にリストする場合)、実際のスコアがヘッダーの最後の数字であることを確認します。

## Perl, 43 + 2 (-p flag) = 45 bytes

言語名をリンクにして、スニペットに表示することもできます。

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


@MorganThrappリファレンス実装は、ベルヌーイ数の定義を明確にするためだけであり、実際に問題を解決するためではありません。
Mego

ああ、落とした。完全に機能する実装だと思いました。
モーガンスラップ

2
@Mego B_60を4倍精度に格納できる標準の浮動小数点数(4倍精度でさえも)はありません。10進数として出力する場合、拡張精度形式を使用する必要がありますか?
リルトシアスト

8
精度の要件が好きではありません。一部の言語には、B_60に十分な精度でフロートを操作するツールがないため、数学的な問題をゴルフで扱う際にこのような問題に対処したくありません。ソリューションを作成し、技術的と思われるものが原因で無効であることに気付くとイライラします。
xnor

2
@xnor 6桁の精度はすでに信じられないほど緩いようです。
プリモ

回答:


8

ジュリア、23 20バイト

Alex Aのおかげで3バイト節約

MathematicaソリューションおよびPARI / GPソリューションと同じ式を使用します

n->n>0?-zeta(1-n)n:1

2
20バイト:n->n>0?-zeta(1-n)n:1
アレックスA.

@AlexA。理由はわかりませんが、負の整数のzeta(n)場合nはエラーをスローします。LinuxでJulia 0.2.1を使用しています。
alephalpha

1
ああ、あなたのジュリアのバージョンはかなり古いです。0.4.1ではうまく動作します。
アレックスA.


9

ジュリア、58バイト

B(m)=m<1?1:1-sum(k->big(binomial(m,k))*B(k)/(m-k+1),0:m-1)

これBは、整数を受け入れてBigFloat(つまり、高精度浮動小数点)を返す再帰関数を作成します。

ゴルフをしていない:

function B(m::Integer)
    m == 0 && return 1
    return 1 - sum(k -> big(binomial(m, k)) * B(k) / (m-k+1), 0:m-1)
end

9

Minkolang 0.14、97バイト

私は実際に最初にそれを再帰的に実行しようとしましたが、現在設計されている私のインタープリターは実際にそれを実行できません。forループ内から再帰しようとすると、新しい再帰が開始されます。そこで、精度の問題を抱えた集計手法を採用しました。だから私はすべてを分数でやりました。分数の組み込みサポートなし。[ ため息 ]

n1+[xxi$z0z2%1+F0c0=$1&$d4Mdm:1R:r$dz1Az0A]$:N.
11z[i0azi6M*i1azi-1+*d0c*1c2c*-1c3c*4$X]f
z1=d1+f

ここで試してみてください。ボーナス:配列には、以前のすべてのベルヌーイ数のすべての小数部があります!

説明(少し)

n1+                 Take number from input (N) and add 1
   [                Open for loop that runs N+1 times (starts at zero)
    xx              Dump the top two values of the stack
      i$z           Store the loop counter in the register (m)
         0          Push 0
          z2%1+     Push 1 if N is even, 2 if odd
               F    Gosub; pops y,x then goes to codebox(x,y), to be returned to

    0c                                 Copy the first item on the stack
      ,                                1 if equal to 0, 0 otherwise
       $1&                             Jump 11 spaces if top of stack is not 0

                                       (If top of stack is not 0, then...)
          $d                           Duplicate whole stack
            4M                         Pop b,a and push GCD(a,b)
              dm                       Duplicate and merge (a,b,c,c -> a,c,b,c)
                :                      Divide
                 1R                    Rotate 1 item to the right (0G works too)
                   :                   Divide
                    r                  Reverse stack

                                       (In both cases...)
                     $d                Duplicate whole stack
                       z1A             Store denominator of B_m in array
                           z0A         Store numerator of B_m in array
                              ]        Close for loop
                               $:      Divide (float division)
                                 N.    Output as number and stop.

11                                           Push two 1s (a, b)
  z[                                         Open a for loop that repeats m times
    i0a                                      Retrieve numerator of B_k (p)
       zi                                    Push m, k
         6M                                  Pop k,m and push mCk (binomial) (x)
           *                                 p*x (c)
            i1a                              Retrieve denominator of B_k (q)
               zi-1+                         m-k+1 (y)
                    *                        q*y (d)
                     d                       Duplicate top of stack
                      0c*                    a*d
                         1c2c*               b*c
                              -              a*d-b*c
                               1c3c*         b*d
                                    4$X      Dump the bottom four items of stack
                                       ]f    Jump back to F

z          m
 1=        0 (if m is 1) or 1 (otherwise)
   d1+     Duplicate and add 1 (1 or 2)
      f    Jump back to F

三行目は責任がある1/2場合はm1であり、そして0/1場合はm1よりも奇数の大きい第2のラインが計算B_m問題の所与の総和式と共に、そして分子と分母とそう全くありません。そうでなければ、ずっと短くなるでしょう。最初の行の前半は何らかの記帳を行い、2行目と3行目のどちらを実行するかを選択し、後半は分子と分母をGCD(該当する場合)で除算し、それらの値を保存します。そして最後に答えを出力します。


8

Python 2、118バイト

xsotにより6バイトを節約しましたピーターテイラーにより、さらに6 10を
節約しました。

n=input()
a=[n%4-1,n<2]*n;exec"a=[(a[j-1]+a[j+1])*j/2for j in range(len(a)-2)];"*~-n
print+(n<1)or-n/(2.**n-4**n)*a[1]

次のIDを使用します。

ここで、A nn 番目の 交互数です。これは、サイズnの半分に対する交互順列の数として正式に定義できます(参照:A000111)。

使用されたアルゴリズムはもともと、Knuth and Buckholtz(1967)によって与えられました:

すべてのk = 1..nに対してT 1、k = 1とする

Tの後続の値は、再帰関係によって与えられます。

T n + 1、k = 1/2 [ (k-1)T n、k-1 +(k + 1)T n、k + 1 ]

A nは、T n、1で与えられます

(参照:A185414


Python 2、152バイト

from fractions import*
n=input()
a=[n%4-1,n<2]*n
for k in range(n-1):a=[(a[j-1]+a[j+1])*j/2for j in range(n-k)]
print+(n<1)or Fraction(n*a[1],4**n-2**n)

200以上の値に必要な正確な分数表現を出力します。


1
あなたが変更した場合range(2,n)range(n-2)、あなた短縮することが可能n-k+1n+~k。また、>>1代わりに使用する理由はあります/2か?最後に、ささいな改善ですが、エイリアスを作成することで数バイト節約できますrange
xsot

提案をありがとう。私はもともと2つの表現を持っていましたが、それらに参加したとき、私はで変化を見落としてい>>1ました/2
プリモ

1
出力行に1文字の保存があります:print+(n<1)or-(-1.)**(n+n/2)*n/(4**n-2**n)*a[n%2^1%n]。そして、同じ文字カウントに対して計算を行うことができますa=[1]*(n+1);exec"a=[(a[j-1]+a[j+1])*j/2for j in range(len(a)-1)];"*(n-1)
Peter Taylor

@PeterTaylor n+n/2は賢いです。他のすべての奇数値はとにかくゼロであるため、1を選択する必要はありません。代替計算は、実際にはビット反転により4バイト短くなりますが、何らかの理由でかなり遅くなります。
プリモ

1
私はOEISテーブルから作業していましたがrange、1回の反復を見つけてスキップすると、初期化を短縮する賢い方法であると思いました。あなたは今、偶数と奇数のインデックスを分割しまし方法は非常にいいです、との定義に印を引いて、さらに節約することができますaa=[(-1)**(n/2),n<2]*n。戻り値は+(n<1)or-n/(2.**n-4**n)*a[1]です。また、2行目の終わりに浮遊セミコロン持っている
ピーター・テイラーを

6

PARI / GP、52 23バイト

有名な式n * ζ(1− n)= − B nを使用します。ここで、ζリーマンゼータ関数です。

n->if(n,-n*zeta(1-n),1)

元のソリューション、52バイト、ベルヌーイ数の生成関数を使用。

n->n!*polcoeff(-x/sum(i=1,n+1,(-x)^i/i!)+O(x^n*x),n)

一度だけ投票できます。ただし、正確ではないのは残念です。
プリモ

文書によると、zetaこの関数は実際には、ベルヌーイ数を用いて計算されます。
プリモ

@primo、はい、組み込みのゼータを使用するすべての答えを不正行為と見なします。
ピーターテイラー

さらに簡単でbernfracbernrealそれぞれ8バイトであり、すでに機能しているため、の必要はありませんn->。しかし、良い解決策のために+1。
チャールズ

6

Python 3、112バイト

編集:私はこの答えを整理しました。Python 2および3でこの質問に答えるために私が考えた他のすべての方法を確認したい場合は、リビジョンを見てください。

ルックアップテーブルを使用しない場合(および代わりにメモ化を使用する場合)、再帰定義を112バイトに管理できます。うわー!をb(m)返すことに注意してくださいFraction。いつものように、バイト数テスト用のリンク

from fractions import*
def b(m):
 s=k=0;p=1
 while k<m:a=m-k;s+=Fraction(p*b(k))/-~a;p=p*a//-~k;k+=1
 return 1-s

また、ルックアップテーブルを使用し、からb(0)までの端数のテーブル全体を返す関数b(m)

from fractions import*
def b(m,r=[]):
 s=k=0;p=1
 while k<m:
  if k>=len(r):r=b(k,r)
  a=m-k;s+=Fraction(p*r[k])/-~a;p=p*a//-~k;k+=1
 return r+[1-s]

1
例えば、の1.代わりに、floatリテラルの末尾のゼロを省略できると思います1.0
アレックスA.

@AlexA。できた すぐにフロートになるため.0s完全に削除されました。
Sherlock9

p=v=1;exec('[...];p+=1'*k)最も内側のループの代わりに使用できますか?
リトシアスト

5

CJam、69 49 34 33バイト

{_),:):R_:*_@f/@{_(;.-R.*}*0=\d/}

オンラインデモ

Cabbie407のおかげで、その答えは秋山谷川アルゴリズムに気づきました。

解剖

{           e# Function: takes n on the stack
  _),:)     e# Stack: n [1 2 3 ... n+1]
  :R        e# Store that array in R
  _:*       e# Stack: n [1 2 3 ... n+1] (n+1)!
  _@f/      e# Stack: n (n+1)! [(n+1)!/1 (n+1)!/2 (n+1)!/3 ... (n+1)!/(n+1)]
            e#   representing [1/1 1/2 ... 1/(n+1)] but avoiding floating point
  @{        e# Repeat n times:
    _(;.-   e#   Take pairwise differences
    R.*     e#   Pointwise multiply by 1-based indices
  }*        e#   Note that the tail of the array accumulates junk, but we don't care
  0=\d/     e# Take the first element and divide by (n+1)!
}

nで乗算します!精度の低下を防ぐことは、少しばかげていないとしても賢明です。これを回避するために、アルゴリズムを少しリファクタリングできなかったのだろうか。
プリモ

リファクタリングは、ベルヌーイ数が1つおきに0であることがわかっているため、同様の値の減算が多数行われるという単純な理由でスケーリングの必要性を回避できないと思います。発生する可能性があります。
ピーターテイラー

4

PARI / GP、45バイト

n->if(n,2*n/(2^n-4^n)*real(polylog(1-n,I)),1)

私と同じ式を使用してPythonの答えで、A nは polylogを介して生成。


テストスクリプト

を実行gpし、プロンプトで次を貼り付けます。

n->if(n,2*n/(2^n-4^n)*real(polylog(1-n,I)),1)
for(i=0, 60, print(i, ": ", %(i)))

1
テストスクリプトを提供していただき、ありがとうございます。テストスクリプトが非常に簡単になりました。
Mego

@Mego for you and me both;)
primo

4

Mathematica、52 48 42バイト

1-Sum[#~Binomial~k#0@k/(#-k+1),{k,0,#-1}]&

リテラル定義を使用する名前のない関数。


であるSign@#必要?
alephalpha

コンピューターでテストしました。を削除した後Sign@#、0に対する正しい答えを返します。
alephalpha

3

Python 2、132 130バイト

import math,fractions
f=math.factorial
B=lambda m:~-m*m%2or 1+sum(B(k)*f(m)/f(k)/f(m-k)/fractions.Fraction(k+~m)for k in range(m))

これは、参照実装のゴルフバージョンです。

これは実際には少し遅いですが、メモ化で大幅に高速化できます:

import math,fractions
f=math.factorial

def memoize(f):
 memo = {}
 def helper(x):
  if x not in memo:
   memo[x] = f(x)
  return memo[x]
 return helper

@memoize
def B(m):
 return~-m*m%2or 1+sum(B(k)*f(m)/f(k)/f(m-k)/fractions.Fraction(k+~m)for k in range(m))

for m in range(61):
 print(B(m))

このバージョンはIdeoneでオンラインで試すことができます。


3

gawk4、79バイト

77バイトのコード+ -Mフラグ用の2バイト

PREC^=2{for(n=$0;m++<=n;)for($(j=m)=1/m;j>1;)$j=(-$j+$--j)*j;printf"%.6f",$1}

これは、Wikipediaページの秋山谷川アルゴリズムの実装です。

「6-decimal-digits-rule」で問題が発生しました。これは整数と6桁を出力するためですが、結果を比較するリストはここにありません。

欠点は、0.000000多くの場合、これがマイナス記号を表示することですが、それは間違っているとは思いません。

使用例

echo 58 | awk -M 'PREC^=2{for(n=$0;m++<=n;)for($(j=m)=1/m;j>1;)$j=(-$j+$--j)*j;printf"%.6f",$1}'

0から60までの出力

0-> 1.000000
1-> 0.500000
2-> 0.166667
3-> -0.000000
4-> -0.033333
5-> 0.000000
6-> 0.023810
7-> 0.000000
8-> -0.033333
9-> 0.000000
10-> 0.075758
11-> -0.000000
12-> -0.253114
13-> -0.000000
14-> 1.166667
15-> -0.000000
16-> -7.092157
17-> -0.000000
18-> 54.971178
19-> -0.000000
20-> -529.124242
21-> -0.000000
22-> 6192.123188
23-> 0.000000
24-> -86580.253114
25-> 0.000000
26-> 1425517.166667
27-> 0.000000
28-> -27298231.067816
29-> 0.000000
30-> 601580873.900642
31-> 0.000000
32-> -15116315767.092157
33-> 0.000000
34-> 429614643061.166667
35-> 0.000000
36-> -13711655205088.332772
37-> 0.000000
38-> 488332318973593.166667
39-> -0.000000
40-> -19296579341940068.148633
41-> -0.000000
42-> 841693047573682615.000554
43-> -0.000000
44-> -40338071854059455413.076812
45-> -0.000000
46-> 2115074863808199160560.145390
47-> -0.000000
48-> -120866265222965259346027.311937
49-> -0.000000
50-> 7500866746076964366855720.075758
51-> -0.000000
52-> -503877810148106891413789303.052201
53-> -0.000000
54-> 36528776484818123335110430842.971178
55-> -0.000000
56-> -2849876930245088222626914643291.067816
57-> -0.000000
58-> 238654274996836276446459819192192.149718
59-> -0.000000
60-> -21399949257225333665810744765191097.392674

だろうprintf"%e"動作しますか?
プリモ

いいえ、0.00000sは非常に小さく、実際にはゼロではないため、そうではありません。
Cabbie407

2

GolfScript、63バイト

~:i.!+.[3i&(2i>]*i(,{i\-,{1$1$(=2$2$)=+*2/}%\;}/~\2i?.(*\--1?**

オンラインデモ

私のPythonの答えと同じ式を使用します


テストスクリプト

61,{[.`
  ~:i.!+.[3i&(2i>]*i(,{i\-,{1$1$(=2$2$)=+*2/}%\;}/~\2i?.(*\--1?**
]p}/

apphbリンクはこれでタイムアウトします。GolfScriptをローカルにインストールしていない場合は、アナーキーゴルフインタープリターを使用することをお勧めします(フォームを使用して、GolfScriptを選択し、貼り付け、送信します)。


2

Perl、101バイト

#!perl -p
@a=($_%4-1,$_<2)x$_;
@a=map$_*($a[$_-1]+$a[$_+1])/2,0..@a-3for 2..$_;
$_=!$_||$_/(4**$_-2**$_)*$a[1]

シバンを3としてカウントすると、入力はstdinから取得されます。

私のPythonの答えと同じ式を使用します


サンプルの使用法

$ echo 60 | perl bernoulli.pl
-2.13999492572253e+034

オンラインデモ


2

R、93バイト

function(m){if(m==0){1}else{v=c();for(k in 0:(m-1))v=c(v,choose(m,k)*f(k)/(m-k+1));1-sum(v)}}

ソリューションとしては本当に独創的ではありません。コメントがあれば、お気軽に!

アンゴルフド:

function(m)
    if(m==0){1}
    else
         v=c()
         for(k in 0:(m-1))
            v=c(v,choose(m,k)*f(k)/(m-k+1))

1-sum(v)

私はこれが少し遅れていることを知っていますが、if/ elseステートメントの順序を変更し、代わりにm>0ループオーバーを使用することで3バイトを節約できます1:m-1
ビリーウォブ

2

実際には46 45バイト(非競合)

私は何ヶ月も真剣に/実際に答えることを意味してきましたが、今はできます。これは、2015年11月には真剣に持っていなかったコマンドを使用しているため、競合していません。ゴルフの提案を歓迎します。オンラインでお試しください!

編集: 2017年2月、Actuallyが更新され、どの関数リテラルがどれであるかが変更されました。通常、これは2月より前に書かれたチャレンジでは単純に非競合になりますが、この回答はすでに非競合であるため、とにかくこの回答を編集しました。楽しい。

これは、ウィキペディアのベルヌーイ数の明示的な定義を使用しています。

;╖ur⌠;╝ur⌠;;0~ⁿ(╛█*╜(uⁿ*⌡MΣ╛uk⌡M┬i@;π;)♀\*@k▼

アンゴルフ

;╖     Duplicate and save m in register 0.
ur     Range [0..m]
  ⌠      Start first for loop
  ;╝     Duplicate and save k in register 1.
  ur     Range [0..k]
    ⌠      Start second for loop (as string).
    ;;     Duplicate v twice.
    0~ⁿ    Push -1, and pow() to get (-1)**v.
    (╛█    Rotate a duplicate v to TOS, push k, and binom(k, v).
    *      Multiply (-1)**v by binom(k, v).
    ╜(uⁿ   Push m, rotate last duplicate v to TOS, increment, and pow() to get (v+1)**m.
    *      (-1)**v * binom(k, v) * (v+1)**m
    ⌡      End second for loop (string turned to function).
  MΣ     Map over range [0..v] and sum
  ╛u     Push k and increment (the denominator)
           (Note: second for loop does numerators only as denominator only depends on k)
  k      Push fraction in list form [numerator, denominator]
  ⌡      End first for loop
M      Map over range [0..k]
┬i@    Transpose all of the fractions, flatten and swap.
         Stack: [denominators] [numerators]
;π     Duplicate and take product of denominators.
;)     Duplicate product and move to bottom of stack.
         Stack: product [denominators] [numerators] product
♀\     For all items in denominators, integer divide product by item.
         Return a list of these scaled-up denominators.
*      Dot product of numerators and the scaled-up denominators as new numerator.
         (In effect, getting the fractions to the same denominator and summing them)
@k     Swap new numerator and product (new denominator) and turn into a list (fraction).
▼      Divide fraction by gcd(numerator, denominator) (Simplify fraction).

2
コマンドを使用する2015年11月には真剣にありませんでしたか?男、これは2015年11月には存在しなかったまったく新しい言語を使用しています!私はとても誇りに思っています...
Mego

1

ルビー、66 61バイト

これは、Pythonの回答のRubyバージョンです。

b=->m{s,p=0r,1;m.times{|k|a=m-k;s+=p*b[k]/-~a;p=p*a/-~k};1-s}

これはRational回答で使用しているので、これは60まで機能すると確信していますが、実行するのに問題があっb[24]たため、86 81 80バイトのルックアップテーブルを再度実装しました。

t=->m{s,p,r=0r,1,m>0?t[m-1]:[];m.times{|k|a=m-k;s+=p*r[k]/-~a;p=p*a/-~k};r<<1-s}

1

J、10バイト

(%1-^@-)t:

x /(1- e -x)の指数生成関数のn 番目の係数を見つけることにより、n 番目のベルヌーイ数を計算します。

使用法

入力に整数または浮動小数点数が引数として指定されている場合、浮動小数点数が出力されます。接尾辞でマークされた拡張整数を指定するxと、拡張整数またはで区切られた2つの拡張整数を出力しますr

   f =: (%1-^@-)t:
   f 1
0.5
   f 1x
1r2
   (,.f"0) i. 10x
0     1
1   1r2
2   1r6
3     0
4 _1r30
5     0
6  1r42
7     0
8 _1r30
9     0

説明

(%1-^@-)t: Input: n
(      )t: Takes a monad and creates a new monad that
           computes the coefficients of its egf
(      )   A monad that operates on x
      -      Negate x
    ^@       Computes its exponential, e^-x
  1-         Subtract it from 1
 %           Divide x by it, x/(1 - e^-x)

1

公理、134 147バイト

b(n:NNI):FRAC INT==(v:=[1/1];k:=1;repeat(k>n=>break;r:=1-reduce(+,[binomial(k,j)*v.(j+1)/(k-j+1)for j in 0..k-1]);v:=append(v,[r]);k:=k+1);v.(n+1))

ウンゴルフとテスト

(23) -> b
   (23)
   b n ==
           1
     v := [-]
           1
     k := 1
     repeat
       if n < k
         then break
         else
                               binomial(k,j)v(j + 1)
           r := 1 - reduce(+,[[--------------------- for j in 0..(k - 1)]])
                                     k - j + 1
           v := append(v,[r])
           k := k + 1
     v(n + 1)
                                                   Type: FunctionCalled b
(50) -> [[i,b(i)]  for i in [0,1,2,3,4,5,6,7,8,9,10]]
   (50)
             1     1              1            1              1             5
   [[0,1],[1,-],[2,-],[3,0],[4,- --],[5,0],[6,--],[7,0],[8,- --],[9,0],[10,--]]
             2     6             30           42             30            66
                                         Type: List List Fraction Integer

(51) -> b 1000
   (51)
   -
   18243104738661887254572640256857788879338336867042906052197158157641126_
    2572624911158657472577321069709615489924627495522908087488299539455188_
    7918567582241551668492697244184914012242579830955617098629924652251740_
    9791915637226361428342780548971002281045465308441161372350696920220116_
    2441791760680262602019620260255790058416539271332852806000966628467639_
    0683434226380702951226108116666172815817157023611889303668166839919156_
    3797683877845690114843122753427426880591799883780255338278664578660218_
    5045895962670442011443630321460259486764674312436994856054301765557425_
    1371150213401051058408679874766352952749178734973676859834707623881634_
    6251471489942512878190574323531299070406930309477389251738705417680653_
    1183648189451892725726445949589759600705334767585389769924857630972963_
    9976364832442643512622073858780110731539833099817555775136008111170797_
    6250597322951308884900670113339167641953793994512377610306198429310933_
    1214632141683542607746641232089854815064629129596536997380608256428801_
    9784909897301658268809203555030692846151917069465607257641149187197651_
    0905515966840312411845543650593021402849221691341852819791233589301994_
    1012291773441794027493574651881059432274494354092231954894280742068472_
    7146192942133436054611475404867886313250114399681532753236429290625909_
    3411000391368336312138915621701535954814084208794241665492294270773347_
    6055878415765927582014214726584822236443691314366097570085473354584000_
    9985915190584047337934331297339403392719579093995842312746836871169674_
    9786460913411872527166990047126222109345933847358924230951718379883743_
    2563465487604170316077418754242710065269818190591271690695446633836120_
    3745255515267088218383996330164203403732365333352120338272021319718003_
    5994220458994876460018350270385634117807768745161622933834063145505621_
    9106004731529642292049578901
     /
    342999030
                                                   Type: Fraction Integer

(52) -> b 60
           1215233140483755572040304994079820246041491
   (52)  - -------------------------------------------
                             56786730
                                                   Type: Fraction Integer

1

APL(NARS)、83文字、166バイト

r←B w;i
r←,1⋄i←0x⋄w+←1
→3×⍳w≤i+←1⋄r←r,1-+/{(1+i-⍵)÷⍨(⍵!i)×r[⍵+1]}¨0..i-1⋄→2
r←r[i]

大きな有理数として整数出力として入力

  B 0
1
  B 1
1r2 
  B 2
1r6 
  B 3
0 
  B 4
¯1r30 
  B 10
5r66 
  B 100
¯94598037819122125295227433069493721872702841533066936133385696204311395415197247711r33330 
  B 1000
¯1824310473866188725457264025685778887933833686704290605219715815764112625726249111586574725773210697096154899246
  27495522908087488299539455188791856758224155166849269724418491401224257983095561709862992465225174097919156
  37226361428342780548971002281045465308441161372350696920220116244179176068026260201962026025579005841653927
  13328528060009666284676390683434226380702951226108116666172815817157023611889303668166839919156379768387784
  56901148431227534274268805917998837802553382786645786602185045895962670442011443630321460259486764674312436
  99485605430176555742513711502134010510584086798747663529527491787349736768598347076238816346251471489942512
  87819057432353129907040693030947738925173870541768065311836481894518927257264459495897596007053347675853897
  69924857630972963997636483244264351262207385878011073153983309981755577513600811117079762505973229513088849
  00670113339167641953793994512377610306198429310933121463214168354260774664123208985481506462912959653699738
  06082564288019784909897301658268809203555030692846151917069465607257641149187197651090551596684031241184554
  36505930214028492216913418528197912335893019941012291773441794027493574651881059432274494354092231954894280
  74206847271461929421334360546114754048678863132501143996815327532364292906259093411000391368336312138915621
  70153595481408420879424166549229427077334760558784157659275820142147265848222364436913143660975700854733545
  84000998591519058404733793433129733940339271957909399584231274683687116967497864609134118725271669900471262
  22109345933847358924230951718379883743256346548760417031607741875424271006526981819059127169069544663383612
  03745255515267088218383996330164203403732365333352120338272021319718003599422045899487646001835027038563411
  78077687451616229338340631455056219106004731529642292049578901r342999030 


0

Perl 6、83バイト

my &B={$^m??1-[+] (^$m).map: {combinations($m,$_)*B($_)/($m+1-$_)}!!1};say B slurp;

より高速な114バイトのソリューション:

my @b=1;for 1..+slurp() {@b.push: 1-[+] (^$^m).map: {([*] $m+1-$_..$m)*@b[$_]/($m+1-$_)/([*] 1..$_)}};say @b[*-1];

コードゴルフチャレンジのコードは、特定の入力で終了するまでに宇宙の寿命が数回必要な場合でも、できるだけ短くする必要があります。
メゴ

0

Javascript、168バイト

function h(b,a){return a?h(a,b%a):b}for(var c=[],a=[],e=0,b,d,f,g;e<=k;)for(c[b=d=e]=1,a[e]=++e;d;)f=c[--d]*a[b]-(c[b]*=g=a[d]),r=h(f*=b,g=a[b]*=g),c[d]=f/r,a[--b]=g/r;

'k'変数を必要なベルヌーイ数に設定すると、結果はc [0]でa [0]になります。(分子と分母)

サンプルの使用法

k = 2;
console.log(c[0] + "/" + a[0]);

他の人ほど小さくはありませんが、私が書いた唯一のものが近づいています。私の他の(ゴルフ以外の)試みについては、https://marquisdegeek.com/code_ada99を参照してください


0

公理、57バイト

g(n)==factorial(n)*coefficient(taylor(t*%e^t/(%e^t-1)),n)

テストと結果のコード

(18) -> [[i, g(i)]  for i in 0..29]
   (18)
              1      1                1              1                1
   [[0,1], [1,-], [2,-], [3,0], [4,- --], [5,0], [6,--], [7,0], [8,- --],
              2      6               30             42               30
                5                  691               7                 3617
    [9,0], [10,--], [11,0], [12,- ----], [13,0], [14,-], [15,0], [16,- ----],
               66                 2730               6                  510
                43867                 174611               854513
    [17,0], [18,-----], [19,0], [20,- ------], [21,0], [22,------], [23,0],
                 798                    330                  138
          236364091               8553103                 23749461029
    [24,- ---------], [25,0], [26,-------], [27,0], [28,- -----------], [29,0]]
             2730                    6                        870
                                       Type: List List Expression Integer

(19) -> g 60
           1215233140483755572040304994079820246041491
   (19)  - -------------------------------------------
                             56786730
                                                 Type: Expression Integer

この関数は上記の誰かが書いたものではなく、t*%e^t/(%e^t-1))オイラーの共助者であることに注意してください


0

Pyth、22バイト

L?b-1sm*.cbdcyd-btdUb1

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

呼ばれる関数定義y<number>などを、yQ

L                      # y=lambda b:
 ?b                  1 # ... if b else 1
   -1                  # 1 -
     s                 #     sum(
      m            Ub  #         map(lambda d: ... , range(b)) 
       *.cbd           #           combinations(b, d) *
            cyd        #             y(d) /      (float division)
               -btd    #                    b - (d - 1)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.