Files

2.7 KiB
Raw Permalink Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
5a23c84252665b21eecc7ee0 Ліві факторіали 5 302302 left-factorials

--description--

Ліві факторіали, !n, можуть посилатися як на субфакторіали, так і на факторіальні суми. Можна заплутатися, побачивши, що одне і те ж позначення використовується для двох різних визначень. Іноді субфакторіали (також відомі як перестановки) можуть використовувати будь-яке з цих позначень:

  • $!n`$
  • $!n$
  • $n¡$

(Можливо, візуально це не очевидно, але в останньому прикладі використовується перевернутий знак оклику) У цьому завданні буде використовуватися дана формула для лівого факторіала:

!n = \\sum\_{k=0}^{n-1} k!

де !0 = 0

--instructions--

Напишіть функцію для обчислення лівого факторіала заданого числа.

--hints--

leftFactorial має бути функцією.

assert(typeof leftFactorial == 'function');

leftFactorial(0) має повернути число.

assert(typeof leftFactorial(0) == 'number');

leftFactorial(0) має повернути 0.

assert.equal(leftFactorial(0), 0);

leftFactorial(1) має повернути 1.

assert.equal(leftFactorial(1), 1);

leftFactorial(2) має повернути 2.

assert.equal(leftFactorial(2), 2);

leftFactorial(3) має повернути 4.

assert.equal(leftFactorial(3), 4);

leftFactorial(10) має повернути 409114.

assert.equal(leftFactorial(10), 409114);

leftFactorial(17) має повернути 22324392524314.

assert.equal(leftFactorial(17), 22324392524314);

leftFactorial(19) має повернути 6780385526348314.

assert.equal(leftFactorial(19), 6780385526348314);

--seed--

--seed-contents--

function leftFactorial(n) {

}

--solutions--

function leftFactorial(n) {
  if (n == 0) return 0;
  if (n == 1) return 1;

  // Note: for n>=20, the result may not be correct.
  // This is because JavaScript uses 53 bit integers and
  // for n>=20 result becomes too large.

  let res = 2,
    fact = 2;
  for (var i = 2; i < n; i++) {
    res += fact;
    fact *= i + 1;
  }

  return res;
}