Калькулятор факториала
Диапазон: 0–170 (ограничение JavaScript)
📊 Результат
📝 Пошаговый расчёт:
🎨 Визуальное дерево умножения
🎯 Перестановки и сочетания
🔄 Перестановки P(n,r)
💡 Порядок важен: ABC ≠ BAC
🎲 Сочетания C(n,r)
💡 Порядок не важен: ABC = BAC
📋 Таблица значений факториала
| n | n! | Цифр | Пример из жизни |
|---|
💡 Интересные факты
🃏 Перетасовка карт
52! ≈ 8.07 × 10⁶⁷ возможных раскладов. Если бы каждый человек на Земле тасовал колоду раз в секунду со времён Большого взрыва, мы едва бы коснулись этого числа!
🎭 Рассадка в театре
10 человек можно рассадить 10! = 3,628,800 разными способами. Управлять такой логистикой становится экспоненциально сложнее!
📊 0! = 1
По определению 0! = 1. Существует ровно один способ «упорядочить» ноль объектов: ничего не делать! Это обеспечивает согласованность математических формул.
🚀 Темп роста
Факториал растёт быстрее экспоненты! Если 2ⁿ удваивается, то n! умножается на всё большие числа. У 100! — 158 цифр!
Калькулятор факториала — вычисление n! с шагами
🔢 Вычисляйте факториал (n!) для любого числа от 0 до 170. Смотрите пошаговое разложение, перестановки, сочетания и реальные применения.
Что такое факториал?
Факториал неотрицательного целого числа n, обозначаемый n!, — это произведение всех положительных целых чисел, меньших или равных n. Он показывает количество способов упорядочить n различных объектов.
Формула факториала
n! = n × (n-1) × (n-2) × ... × 3 × 2 × 1
- 0! = 1 (по определению)
- 1! = 1
- n! = n × (n-1)! (рекурсивное определение)
Примеры факториалов
- 5! = 5 × 4 × 3 × 2 × 1 = 120
- 10! = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 3,628,800
- 0! = 1 (особый случай)
- 20! = 2,432,902,008,176,640,000
Почему 0! = 1?
Существует ровно один способ упорядочить ноль объектов: пустое расположение. Это определение гарантирует, что математические формулы (особенно в комбинаторике) работают корректно. Оно также согласуется с рекурсией: n! = n × (n-1)!, поэтому 1! = 1 × 0! означает, что 0! должен быть равен 1.
Перестановки
P(n,r) = n!/(n-r)!
Количество способов упорядочить r объектов из n различных объектов, когда порядок важен.
- Пример: P(5,3) = 5!/(5-3)! = 120/2 = 60
- Применение: места на пьедестале в гонке (1-е, 2-е, 3-е)
Сочетания
C(n,r) = n!/(r!(n-r)!)
Количество способов выбрать r объектов из n различных объектов, когда порядок не важен.
- Пример: C(5,3) = 5!/(3!×2!) = 120/(6×2) = 10
- Применение: лотерейные числа, выбор комитета
Концевые нули в n!
Концевые нули появляются из множителей 10 = 2 × 5. Поскольку множителей 2 всегда больше, чем 5, достаточно посчитать множители 5:
Нули = ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ...
- 10! имеет 2 концевых нуля
- 25! имеет 6 концевых нулей
- 100! имеет 24 концевых нуля
Применения в реальном мире
- Криптография: количество возможных ключей шифрования
- Планирование: способы упорядочить встречи, задачи, события
- Генетика: возможные последовательности ДНК/белков
- Вероятность: расчёт шансов в играх, лотереях
- Информатика: анализ сложности алгоритмов
- Производство: варианты организации производственной линии
- Логистика: задачи оптимизации маршрутов
Известные значения факториала
- 52! ≈ 8.07 × 10⁶⁷ (тасование карт)
- 70! ≈ 1.2 × 10¹⁰⁰ (превышает число атомов во Вселенной ≈ 10⁸⁰)
- 100! ≈ 9.3 × 10¹⁵⁷ (158 цифр!)
- 170! ≈ 7.3 × 10³⁰⁶ (максимум JavaScript)
Приближение Стирлинга
Для больших n вычислять точные факториалы непрактично. Приближение Стирлинга:
n! ≈ √(2πn) × (n/e)ⁿ
Это приближение становится точнее при росте n. Для n = 10 ошибка < 1%.
Скорость роста факториала
Факториал растёт намного быстрее экспоненциальных или полиномиальных функций:
- Полином: n² = 100 при n=10
- Экспонента: 2ⁿ = 1,024 при n=10
- Факториал: n! = 3,628,800 при n=10
Двойной факториал
Двойной факториал (n!!) перемножает каждое второе число:
- n!! = n × (n-2) × (n-4) × ... × 2 или 1
- 7!! = 7 × 5 × 3 × 1 = 105
- 8!! = 8 × 6 × 4 × 2 = 384
Субфакториал (дерранжменты)
Субфакториал !n считает перестановки, в которых ни один элемент не остаётся на своём месте:
!n = n! × (1/0! - 1/1! + 1/2! - 1/3! + ... + (-1)ⁿ/n!)
Пример: !3 = 2 (перестановки ABC без совпадений: BCA, CAB)
Реализация в программировании
Итеративный подход:
function factorial(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
Рекурсивный подход:
function factorial(n) {
if (n === 0 || n === 1) return 1;
return n * factorial(n - 1);
}
💡 Совет: При вычислении перестановок и сочетаний сокращайте общие множители до вычисления, чтобы избежать переполнения. Для C(100,2) = 100!/(2!×98!) вычисляйте (100×99)/2 = 4,950 вместо того, чтобы считать огромные факториалы отдельно!
Комментарии (0)
Оставьте отзыв — пожалуйста, будьте вежливы и по теме.
Войти, чтобы комментировать