catalan.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.createCatalan = void 0;
  6. var _factory = require("../../utils/factory.js");
  7. var name = 'catalan';
  8. var dependencies = ['typed', 'addScalar', 'divideScalar', 'multiplyScalar', 'combinations', 'isNegative', 'isInteger'];
  9. var createCatalan = /* #__PURE__ */(0, _factory.factory)(name, dependencies, function (_ref) {
  10. var typed = _ref.typed,
  11. addScalar = _ref.addScalar,
  12. divideScalar = _ref.divideScalar,
  13. multiplyScalar = _ref.multiplyScalar,
  14. combinations = _ref.combinations,
  15. isNegative = _ref.isNegative,
  16. isInteger = _ref.isInteger;
  17. /**
  18. * The Catalan Numbers enumerate combinatorial structures of many different types.
  19. * catalan only takes integer arguments.
  20. * The following condition must be enforced: n >= 0
  21. *
  22. * Syntax:
  23. *
  24. * math.catalan(n)
  25. *
  26. * Examples:
  27. *
  28. * math.catalan(3) // returns 5
  29. * math.catalan(8) // returns 1430
  30. *
  31. * See also:
  32. *
  33. * bellNumbers
  34. *
  35. * @param {Number | BigNumber} n nth Catalan number
  36. * @return {Number | BigNumber} Cn(n)
  37. */
  38. return typed(name, {
  39. 'number | BigNumber': function numberBigNumber(n) {
  40. if (!isInteger(n) || isNegative(n)) {
  41. throw new TypeError('Non-negative integer value expected in function catalan');
  42. }
  43. return divideScalar(combinations(multiplyScalar(n, 2), n), addScalar(n, 1));
  44. }
  45. });
  46. });
  47. exports.createCatalan = createCatalan;