1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
| {$APPTYPE Console} var k,n:integer;
function Binom(n,k:integer): int64; var i : integer; begin
i := n-k; If k>i then k := i;
result := 1; For i := 1 to k do begin result := (n*result) div i; dec(n); end; end;
function binomial(n, k: Integer): Int64; var x, y: Integer;
pas_dreieck: array of array of Int64; begin result:=0; if n-k < k then k := n-k; if k=0 then result := 1; if k=1 then result := n; if k>1 then begin setlength(pas_dreieck,k+1,n+1); for y:=0 to n do pas_dreieck[0,y] := 1; for y:=1 to n do pas_dreieck[1,y] := y; for x:=2 to k do for y := x to n do pas_dreieck[x,y] := pas_dreieck[x-1,y-1] + pas_dreieck[x,y-1]; result := pas_dreieck[k,n]; end; end;
function binomPas(n, k: Integer): Int64; var x, y,idx,g: Integer; s: array[0..1]of int64; pas_dreieck: array of Int64; begin result:=0; if n-k < k then k := n-k; if k=0 then result := 1; if k=1 then result := n; if k>1 then begin setlength(pas_dreieck,n); for y:=0 to n-1 do pas_dreieck[y] := 1; for y:= 1 to n-1 do begin S[0] := 1; idx:=1; g := y-1; if g>k then g:= k; for x:= 1 to g do begin S[idx] := pas_dreieck[x]; pas_dreieck[x] := S[0]+S[1]; idx:=1-idx; end; end; result := pas_dreieck[k]+pas_dreieck[k-1]; end; end;
begin n := 61; For k := 0 to n do begin writeln(n,'|',k,' = ',binom(n,k)); writeln(n,'|',k,' = ',binomPas(n,k)); writeln(n,'|',k,' = ',binomial(n,k)); end; readln; end. |