Количество сочетаний C(n,k) (152)

Программа для вычисления C(n,k)=n!/(k!(n-k)!) создана путём адаптации для МК-152 программ, написанных для советских ПМК.

00.П1  01.↔  02.–   03.FВx  04.Kmax  05.↔  06.П0  07.1  08.ИП1  09.x
10.ИП0 11.%  12.FL1 13.14   14.FL0   15.08 16.С/П 17.КБП0

Для ускорения счёта использована находка Епанечникова-Цветкова (использование FL1 для модификации R1), для уменьшения длины программы использованы особенности инструкции Kmax на МК-152 (минимальное число помещается в RY). Т.к. все промежуточные результаты хранятся в стеке, точность улучшена на два десятичных знака.

Регистры:
R1 n
R0 меньшее из k и (n-k)

Инструкция.
Чтобы посчитать количество сочетаний из n по k, надо ввести в стек k, затем n и нажать В/0 С/П. Результат можно прочитать на экране: k В↑ n В/0 С/П «C(n,k)»

Тестовые примеры.
1. Количество вариантов Спортлото 5 из 36:
5 В↑ 36 В/0 С/П «376992»
Итого: C(36,5)=376992

2. Вычисление производится с большой точностью. При необходимости дополнительные знаки можно вывести на экран. Например, вычислим C(250,110):
110 В↑ 250 С/П «1,5120243 73»
1,512024 ВП 73 – «2,688502 66»
Итого: C(250,110)≈1,5120242688502x1073

3. C(100,10) (МК-152, прошивка 1.03):
10 В↑ 100 С/П «1,7310309 13»
1,73103 ВП 13 – «9456440»
Итого: C(100,10)=17310309456440 — с точностью до последнего знака!

Оценка: 5 (Голосов 3)