Что такое факториал и как его вычислить
Статья, после которой вы начнёте щёлкать факториалы как орешки.
Иллюстрация: Катя Павловская для Skillbox Media
Даже если вы уже давно окончили школу, факториалы всё равно могут доставить немало приятных флешбэков — например, если вы обучаетесь программированию и знакомитесь с задачками на рекурсию или комбинаторику. Поэтому мы решили максимально просто объяснить, что такое факториал, как его вычислять и зачем он вообще нужен.
Эта статья будет полезна как опытным программистам, которые хотят освежить знания, так и тем, кто ещё учится: школьникам, студентам и совсем зелёным джунам.
Содержание:
Что такое факториал
Факториал числа n — это произведение всех натуральных чисел от единицы до n. Обозначается факториал символом восклицательного знака: !.
Это определение из учебника, и оно пока звучит сложновато — неясно, зачем эти факториалы вообще нужны и как они могут пригодиться в науке и технике. Но об этом чуть позже — для начала давайте посмотрим на примеры факториалов:
Чтобы вычислить их, нам нужно перемножить все числа от единицы до числа, стоящего под знаком факториала — так гласит определение. Получаем выражения:
Ещё в математическом определении сказано, что факториал не может быть отрицательным или дробным — то есть вот такие факториалы вычислить нельзя:
Для чего нужен факториал
Факториалы незаменимы там, где нужно быстро посчитать количество комбинаций и сочетаний разных предметов. В математике этому посвящён даже целый раздел — комбинаторика. Её методы используют много где: от лингвистики до криптографии и анализа ДНК. И во всех этих сферах факториал помогает упрощать сложные вычисления.
Разберём на примере, как это работает.
Допустим, у вас есть пять шоколадок и вы решили раздать их пяти друзьям — каждому по одной. Задача — выяснить, сколько существует способов раздать эти шоколадки. Начинаем размышлять:
- первую шоколадку можно отдать одному из пяти друзей;
- вторую — одному из четырёх друзей, потому что один уже получил свою шоколадку;
- третью — одному из трёх, потому что двое уже наслаждаются своими шоколадками;
- четвёртую — одному из двух;
- пятую — последнему другу.
Получается, что способов раздать первую шоколадку — 5, вторую — 4, третью — 3, четвёртую — 2, а пятую — всего 1. По правилам математики, чтобы выяснить общее количество всех вариантов, нужно перемножить их между собой. Ну а кто мы такие, чтобы с этими правилами спорить?
Смотрим на выражение выше и понимаем: ведь оно идеально вписывается в определение факториала — произведение натуральных чисел от одного до n (в нашем случае n равно 5). Следовательно, это выражение можно коротко и изящно записать в виде факториала:
Выходит, что всего способов раздать пять шоколадок пяти друзьям существует 120. Вот как может выглядеть один из них:
Конечно, в жизни вам вряд ли придётся считать количество способов раздать друзьям шоколадки. Но, например, в статистике, теории вероятностей, матанализе и программировании факториалы используют сплошь и рядом. Так что, если видите себя в будущем на матмехе или, на худой конец, в IT, то лучше познакомиться с ними хотя бы бегло.
Какие свойства и формулы есть у факториалов
Так как факториалы используются в разных областях математики, свойств у них довольно много — каждая область привносит какие-то свои методы вычислений. Одно из свойств вы уже знаете: факториал — это всегда целое положительное число. Вот ещё несколько, которые стоит запомнить:
- Факториал нуля равен единице — 0! = 1.
- Факториал единицы тоже равен единице: 1! = 1.
- Рекурсия: n! = (n – 1)! × n. Это основное свойство факториалов, о нём мы чуть подробнее поговорим дальше.
Мы видим, что каждое свойство описывается какой-то формулой — и некоторые из этих формул могут быть весьма полезны. Они позволяют нам находить факториалы проще и быстрее, чем простым перемножением натуральных чисел. Разберём эти формулы тоже.
Формула Стирлинга
Чтобы вычислить факториал, не используя так много операций умножения, придумали формулу Стирлинга. Вот как она выглядит:
Выглядит страшно, но на самом деле она очень полезная. Её используют, когда хотят приблизительно узнать факториал большого числа. Обычным способом это будет сделать сложно даже мощному компьютеру — например, попробуйте посчитать в онлайн-калькуляторе факториал числа 10 024 (спойлер: это может занять несколько часов и даже дней).
Давайте попробуем вычислить факториал числа 6 по этой формуле:
Число e примерно равно 2,71, а π — 3,14. Подставляем их в выражение и получаем ответ:
Получили приближённое значение настоящего факториала, который равен 720. Но можно сделать ответ и более точным. Для этого нужно добавить больше знаков после запятой всем переменным — например, если взять 20 знаков, то ответ будет таким:
Это уже больше похоже на правду. Хотя погрешность всё равно есть.
Рекуррентная формула
Рекуррентная формула позволяет вычислить факториал числа n, основываясь на факториале предыдущего числа — (n – 1). Выглядит она так:
В целом рекуррентная формула не приносит нам большой пользы, так как всё равно приходится вычислять факториал предыдущего числа. Если он равен какому-то большому числу (например, 100), то использование формулы теряет смысл — слишком уж много вычислений это потребует.
Рекуррентная формула основана на главном свойстве факториалов — рекурсии: n! = (n – 1)! × n. Это свойство особенно полезно при решении задач по комбинаторике: так мы можем быстро сокращать факториалы и упрощать выражения.
Однако рекуррентная формула хорошо подходит для алгоритмов — в частности, для программирования. Мы можем задать начальное значение: например, что 0! = 1 или 1! = 1, а затем считать следующие факториалы по формуле:
Получим алгоритм для вычисления факториалов. Не очень эффективный, но простой.
Давайте вычислим по этой формуле факториал числа 4. Сначала распишем рекуррентную формулу до базового значения — факториала числа 1:
Можно записать это и в сокращённом виде:
Теперь последовательно подставляем значение факториала, которое мы уже знаем, и вычисляем результат:
Получили ответ — 24. Ничего сложного, просто перемножаем числа.
Кстати, всю эту формулу можно обернуть в реально работающую функцию на языке Python:
Можете попробовать запустить её в онлайн-интерпретаторе и посмотреть, как работает. Тут есть один нюанс: Python не даст вам посчитать факториал числа больше 998, так как у него есть ограничение на количество вызовов функции — в программировании это называется глубиной рекурсии.
Шпаргалка: таблица факториалов
Чтобы быстро находить, чему равен факториал, можно запомнить или сохранить в заметки вот такую табличку. Она рассчитана всего на 12 чисел, но для большинства учебных задач этого хватит.
1! | 1 |
2! | 2 |
3! | 6 |
4! | 24 |
5! | 120 |
6! | 720 |
7! | 5040 |
8! | 40 320 |
9! | 362 880 |
10! | 3 628 800 |
11! | 39 916 800 |
12! | 479 001 600 |
Примеры задач на факториалы с решениями
С теорией вроде разобрались — теперь попробуем решить несколько задач с факториалами, чтобы закрепить знания на практике.
Умножение факториалов
Задача: перемножить два факториала.
Решение:
Сперва нужно вычислить значения факториалов, а затем перемножить полученные значения:
Обратите внимание: во второй строке мы применили рекуррентную формулу, чтобы быстрее вычислить факториал числа 7.
Вычитание факториалов
Задача: вычесть из одного факториала другой.
Решение:
Используем тот же подход, что и в предыдущей задаче: сначала вычисляем факториалы, а затем получаем ответ на всё выражение.
Вроде бы ничего сложного, главное — не запутаться в умножении.
Перемножение факториалов
Задача: умножить один факториал на другой:
Решение:
Вычисляем факториалы, потом перемножаем их значения:
Во второй строке мы воспользовались таблицей выше и быстро нашли значение факториала от числа 8.
Сокращение факториалов
Задача: сократить дробь и вычислить её значение.
Решение:
Здесь мы воспользуемся рекуррентной формулой для вычисления факториала и разложим верхний факториал на множители:
В первой строке мы применили рекуррентную формулу два раза, а во второй — просто сократили одинаковые факториалы в числителе и в знаменателе.
Разложение факториалов
Задача: сократить дробь.
Решение:
Хотя здесь нет конкретных чисел, но принцип решения остаётся таким же: используем рекуррентную формулу и сокращаем одинаковые значения в числителе и знаменателе.
Главное — не запутаться и правильно применить рекуррентную формулу.
Что запомнить
- Факториал — это произведение всех натуральных чисел от 1 до данного числа. Например, факториал числа 5 будет равен 1 × 2 × 3 × 4 × 5 = 120.
- Его используют во многих областях науки — например, комбинаторике, теории вероятностей и математическом анализе.
- Помимо стандартной формулы для вычисления факториала можно использовать формулы Стирлинга и рекуррентную формулу.
- Формула Стирлинга нужна для того, чтобы посчитать факториал без большого числа операций умножения.
- Рекуррентная формула позволяет вычислить факториал на основе предыдущего факториала.