![]() |
|
|
![]()
|
|
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Возникла такая задача. Имеется дробь, в числителе которой произведение из n факториалов, в знаменателе - произведение из m факториалов. Типа:
Если считать в лоб, то сразу упираешься в машиннуе переполнение. Пытаюсь сортировать факториалы и сначала получать частное двух наибольших, умнажать его на частное двух следующих и т.д. Но что-то все равно кисло получается. Может есть какой-то алгоритм борьбы с такими зверями? Может логарифмы считать? Кто с этим сталкивался? -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Кстати очень рульная идея. А почему те не хочешь ее реализовать? Правда с точностью возникнут траблы... но все же лучше чем ничего. Это сообщение отредактировал(а) ivashkanet - 9.1.2008, 18:17 |
|||
|
||||
| PPS05 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 262 Регистрация: 6.11.2005 Где: Беларусь, Минск Репутация: нет Всего: 7 |
Я бы писал длинную арифметику.
-------------------- Ушел с форума и не вернулся. |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Хочу. Просто она пришла мне в голову в процессе написания поста и, когда я пост отправлял, она там еще дозревала. PPS05, медленно работает - и без того время рассчета не малое. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| PPS05 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 262 Регистрация: 6.11.2005 Где: Беларусь, Минск Репутация: нет Всего: 7 |
Почему? 100! простым последовательным умножением за доли секунды. Зато точность не потеряешь. -------------------- Ушел с форума и не вернулся. |
|||
|
||||
| Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
||||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
почему кисло? они же вроде отлично сокращаться должны исходя из свойств факториала. Добавлено через 4 минуты и 23 секунды .. по идее дробь вида 1/K или K/1 остатья должна после сокращаения. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 1 Всего: 56 |
_Y_, ты бы хоть пару примеров привёл, какие реальные данные у тебя будут... Добавлено через 3 минуты и 50 секунд Кстати что-то мне подсказывает, что здесь пригодится треугольник Паскаля -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| PPS05 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 262 Регистрация: 6.11.2005 Где: Беларусь, Минск Репутация: нет Всего: 7 |
Если не ошибаюсь, можно аналитически выразить степени простых множителей в числителе и знаменателе, тогда легко сократить.
Т.е. обрабатываем по множителю и считаем разложение. N! суть произведение последовательных, а в них мы знаем, что, пр., множитель 2 встречается с двойки шагом 2 и т.д., мы можем посчитать его количество в произведении 1 * 2 * ... * N. ...Хотя, не думаю, что это проще, чем обычное разложение подфакториального числа. Это сообщение отредактировал(а) PPS05 - 9.1.2008, 20:42 -------------------- Ушел с форума и не вернулся. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
_Y_, в общем, задача интересная, хочется написать код. узнать бы полную формулировку задачи. какие ограничения на m, n, F, G?
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 1 Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: нет Всего: 48 |
source777, угу. я собсвенно про ограничения и спросил потом именно по этой причине.
-------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| mmvds |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 230 Регистрация: 22.12.2007 Репутация: 1 Всего: 6 |
Предлагаю следующий способ решения:
1) Если чисел f[i] и g[i] немного и они не большие, то действительно достаточно создать еще два массива для числителя и знаменателя заполняя их множителями, а затем делать поиск элементов присутствующих и в том и другом массиве и заменять их например на 1, после чего перемножить все множители, не равные 1 для обоих массивов и поделить один на другой. 2) Если чисел f[i] и g[i] много и размерность массивов не позволяет записать все их множители, то будем сокращать кол-во множителей для m>n m!/n!=mnog(m-n,m) где функция mnog(m-n,n) добавляет в массив с сомножителями числа от m-n до n. Осталось только придумать алгоритм выбора этих самых m и n из f[i], g[i] для максимального уменьшения числа сомножителей. Как приду домой гляну еще раз. |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |