Страницы: 1
RSS
Как вычислить произвольный элемент треугольника Паскаля, одной формулой
 
правее треугольник Паскаля (его начало)
1:1
2:11
3:121
4:1331
5:14641
6:15101051
и т.д….   (треугольник бесконечен)
в каждой   строке
1-й элемент =1 (как   и последний)
например: (для   понимания терминологии)
в 5-й строке 2-й   элемент = 4, а 3-й = 6
в 6-й строке 3-й   элемент равен 10
кто-то знает как   сразу посчитать
7-й элемент в 124-й   строке?
(не вычисляя 123   предыдущие строки))
(2804049424)
спасибо!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Это биноминальные коэффициенты, если верить Вики. Формула =ФАКТР(124)/(ФАКТР(7)*ФАКТР(124-7))
 
Да, биномиальные коэффициенты. Через факториалы в VBA я бы не стал считать из-за возможной потери точности. Быстрее всего как раз по образцу сообщения #1. Если уж по формуле, то нужно произведение чисел от 118 до 124 разделить на произведение чисел от 2 до 7, отдавая приоритет челочисленному делению.

Ответ относится к VBA.
Изменено: sokol92 - 30.11.2021 18:49:29
Владимир
 
такая логика?
Код
=ЦЕЛОЕ(ПРОИЗВЕД(ПОСЛЕД(7;1;124-7+1;1))/ПРОИЗВЕД(ПОСЛЕД(7-1;1;2;1)))
 
Цитата
написал: такая логика?
Не совсем. В общем случае должен появится эквивалент:

124 * 123 / 2 * 122 / 3 * 121  / 4 * 120 / 5 * 119 / 6 * 118 / 7

чтобы по ходу вычилений не было дробных чисел.
Если сразу умножать все числа (а потом делить), то в какой-то момент не хватит точности (я пишу об общем случае).
Владимир
 
все равно не догнал 123/2 даже дробное и с факториалом тот же результат
Код
=ПРОИЗВЕД(ПОСЛЕД(7;1;124-7+1;1)/ПОСЛЕД(7;1;7;-1))
Изменено: Тимофеев - 30.11.2021 19:57:45
 
Формула массива:
Код
=ПРОИЗВЕД(СТРОКА(ДВССЫЛ(124-7+1&":"&124-1)))/ФАКТР(7-1)
 
всем спасибо!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Тимофеев написал:
все равно не догнал
Я написал про общий случай. Поэкспериментируйте дальше: возьмите 8-й элемент в 124 строке, 9-й, 10-й, 11-й, ...
Изменено: sokol92 - 30.11.2021 20:20:35
Владимир
 
Треугольник Паскаля - это число сочетаний
можно вычислить одной функцией ЧИСЛКОМБ(...)

ЧИСЛКОМБ(124-1;7-1) = 4249404082
Изменено: MCH - 30.11.2021 20:59:15
 
круто
Изменено: Тимофеев - 30.11.2021 21:00:24
 
Цитата
MCH написал:
функцией ЧИСЛКОМБ
Михаил, точно! Склероз. :oops:  
Изменено: sokol92 - 30.11.2021 21:14:15
Владимир
 
Сделал проверку расчетов через треугольник и формулой, значения совпадают
Если решать через факториалы, то будет потеря точности и факториал больших чисел (больше 170) уже не вычислить стандартными средствами
По ссылке от Владимира (sokol92) есть мое решение на VBA по подсчету числа сочетаний без вычислений факториалов
Изменено: MCH - 01.12.2021 08:16:52
 
Цитата
MCH: есть мое решение на VBA по подсчету числа сочетаний без вычислений факториалов
забрал себе, а вам — спасибо  :idea:  8)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
забрал  себе
Сравнительный тест функции ЧИСЛКОМБ() и UDF, могут быть различии в 15ой значащей цифре
Для больших чисел, если нужна точность, нужно применять длинную арифметику
 
Цитата
MCH: могут быть различии в 15ой значащей цифре
помимо того, что ваша функция вычислит то, что не вычислит штатная, она ещё и точнее - верно?
Для длинной арифметики есть библа от Виталия
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Точность вычисления зависит от стандарта IEEE 754, поэтому UDF не может считать точнее стандартной функции ЧИСЛКОМБ, если считать через факториалы, то потеря точности еще больше
Длинную арифметику можно реализовать и без внешней библиотеки, у меня и у Виталия есть реализации на VBA (у Виталия реализация на VBA еще быстрее и более универсально сделана)
И, да, библиотеку на C++ от Виталия не возможно превзойти, как по скорости, так и по функционалу.
 
Цитата
MCH: C++
скорости скоростями, а алгоритмы никто не отменял - он у вас не раз консультировался  ;)
Ещё раз спасибо!  :idea:
Изменено: Jack Famous - 02.12.2021 11:14:55
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх