Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > агоритм n!


Автор: valdoo 28.10.2005, 18:02
Помогите найти ефективмый алгоритм подсчота очень больших факториалов.
заранее спасибо

Автор: podval 28.10.2005, 19:01
По теме, но не ответ на поставленный вопрос. smile

В советском калькуляторе "Электроника МК-35", видимо, был очень эффективный алгоритм. Считался практически мгновенно.

Цитата

Очень интересно эти калькуляторы вычисляли факториал - простым перебором.

http://calculus.narod.ru/mircal/history/calc_hi.htm

Вопрос - как именно?

Автор: esperant0 28.10.2005, 20:44
Может быть используя приближение Стирлинга smile

Автор: yaja 28.10.2005, 21:13
Цитата(esperant0 @ 28.10.2005, 20:44)
Может быть используя приближение Стирлинга 

НЕт, поскольку она имеет только теоретический интерес, там сходимость очень медленная
smile

Автор: esperant0 28.10.2005, 23:11
В относительной ошибке - сходимость очень быстрая.


Автор: jxr 28.10.2005, 23:20
Создай свой модул (class C++).
Например , что бы работать с числами по 100 цирфам
0...000 ---- 9...999 (100 цифр )
Операции: +,-,* ...
Входяшие и выхожяшие будет STRING тип !!!
думаете может не правилно ... smile

Автор: valdoo 29.10.2005, 13:05
приближение Стирлинга мне неподходит. мне нужен точный пезультат.
С длинной цыфр тоже проблем нет. единственная проблема заключается в том что подщёты праисходят очень медленно.

Автор: Stream 29.10.2005, 14:33
А если воспользоваться формулой Стирлинга и применить к ней логарифм по основанию 10? smile

Автор: yaja 31.10.2005, 21:02
Что-то я подумал smile и пришел к выводу, что факториал никак не посчитать, кроме n! = 1 * 2 * 3... * n
Просто для большинства чисел, его факториал не влезет ни в одну из переменных, поэтому пользуются длинной арифметикой. Дык может существует способ, позволяющий минимизировать чило действий с длинными числами. И именно это спрашивает автор??
Мне сложно представить функцию, равную n! и позволяющую бысто высчитывать свои значени. Собственно мне такая функция известна, но имхо проще перемножить n - 1 чисел
n! = Г(n + 1); Г(s) = интеграл от 0 до + бесконечности ((x^(s - 1)) * exp(-x) * dx) - гамма функция Эйлера (формула Стирлинга выводится из ней)

Автор: esperant0 1.11.2005, 21:04
Если уж на то пошло, то есть бесканечное кол-во ф-й дающих факториал.\


Формулу Стирлинга нам доказали в школе, разумеется без Гамма и Бетта ф-й

Автор: Akina 1.11.2005, 21:33
Цитата(valdoo @ 28.10.2005, 19:02)
очень больших факториалов

каков верхний порог основания?

Автор: yaja 1.11.2005, 21:34
Цитата(esperant0 @ 1.11.2005, 21:04)
Формулу Стирлинга нам доказали в школе, разумеется без Гамма и Бетта ф-й

Вывод формулы Стирлинга без функций Эйлера возможен, но он очень искусственный и не имеет теоретического интереса. А зная функцию Эйлера, формула Стирлинга получается буквально за одну строчку smile

Автор: esperant0 1.11.2005, 21:55
Цитата(yaja @ 1.11.2005, 21:34)
Цитата(esperant0 @ 1.11.2005, 21:04)
Формулу Стирлинга нам доказали в школе, разумеется без Гамма и Бетта ф-й

Вывод формулы Стирлинга без функций Эйлера возможен, но он очень искусственный и не имеет теоретического интереса. А зная функцию Эйлера, формула Стирлинга получается буквально за одну строчку smile

Термин исскуственное док-во плохо определен, но я с Вами не согласен

Автор: yaja 1.11.2005, 22:13
Цитата(esperant0 @ 1.11.2005, 21:55)
Термин исскуственное док-во плохо определен

ээ ну мы уже при доказательстве знали формулу Стирлинга (как бы её из потолка взяли). Совсем непонятно кому она пришла в голову(это я шучу smile ) и как? А глядя на функции Эйлера немного все проясняется smile

Автор: Guest 2.11.2005, 13:59
Цитата(Akina @ 1.11.2005, 21:33)
Цитата(valdoo @ 28.10.2005, 19:02)
очень больших факториалов

каков верхний порог основания?

Мне нужны факториалы ~1.000.000 и больше.

Пришлось всё делать попростому n!=1*2*...*(n-1)*n
Занимает мноооого времени smile

Автор: valdoo 2.11.2005, 14:02
Цитата(Guest @ 2.11.2005, 13:59)
Цитата(Akina @ 1.11.2005, 21:33)
Цитата(valdoo @ 28.10.2005, )
очень больших факториалов

каков верхний порог основания?

Мне нужны факториалы ~1.000.000 и больше.

Пришлось всё делать попростому n!=1*2*...*(n-1)*n
Занимает мноооого времени smile

забыл прилогится

Автор: yaja 2.11.2005, 15:09
Цитата(Guest @ 2.11.2005, 13:59)
Занимает мноооого времени smile

Подсчет таких чисел по любому будет занимать много времени

Автор: neutrino 2.11.2005, 19:11
Знаете задачу о том как найти 4-ю цифру числа 23! ???
Может по такой логике можно сократить количество умножений...

Автор: SoWa 3.11.2005, 19:46
Если пишешь на Дельфах, то в DRKB есть модуль для работы с ОЧЕНЬ большими числами, посмотри, как там реализовано.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)