Program Bernoulli(input,output); Const max = 50; Type Bruch = Record z,n:integer End; Var B:Array[0..max] Of Bruch; anz,m,i,j,k:integer; Function Binoko(n,k:integer):integer; Var nf,kf,nkf,i:integer; Begin nf:=1; kf:=1; nkf:=1; For i:=1 To n Do Begin nf:=nf*i; If i=k Then kf:=nf; If i=n-k Then nkf:=nf End; Binoko:=nf Div (kf*nkf) End; Function ggt(a,b:integer):integer; Begin While a<>b Do If a>b Then a:=a-b Else b:=b-a; ggt:=a End; Procedure Add(Var b:Bruch; x,y:integer); Var g:integer; Begin If x<>0 Then If b.z=0 Then Begin b.z:=x; b.n:=y End Else Begin g:=ggt(b.n,y); b.z:=(y div g)*b.z + (b.n div g)*x; b.n:=(b.n div g)*y; If b.n<0 Then Begin b.z:=-b.z;b.n:=-b.n End; If b.z=0 Then b.n:=1 Else Begin g:=ggt(abs(b.z),b.n); b.n := b.n div g; b.z := b.z div g End End End; Begin write('Anzahl:');readln(anz); writeln; B[0].z:=1; B[0].n:=1; For m:=1 to anz do Begin B[m].z:=0; B[m].n:=1; For i:=0 to m-1 Do Begin j:= binoko(m+1,i)*B[i].z; If j<>0 Then Begin k:= ggt(abs(j),abs(B[i].n)); add(b[m], j div k, B[i].n div k) End End; If B[m].z=0 Then k:=m+11 Else k:=ggt(abs(B[m].z), m+1); B[m].z := (-B[m].z) Div k; B[m].n := B[m].n * ((m+1) Div k); write('B(', m:2 , ') = ' , B[m].z:10); If B[m].z=0 Then writeln Else writeln('/',B[m].n:1) End; writeln End.