Поиск:

Ответ в темуСоздание новой темы Создание опроса
> посчитать дробь, состоящую из факториалов, типа (f1!*f2!*...*fn!)/(g1!*g2!*...*gm!) 
:(
    Опции темы
_Y_
Дата 9.1.2008, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Возникла такая задача. Имеется дробь, в числителе которой произведение из n факториалов, в знаменателе - произведение из m факториалов. Типа:
Код

типа (f1!*f2!*...*fn!)/(g1!*g2!*...*gm!) = ????

Если считать в лоб, то сразу упираешься в машиннуе переполнение. Пытаюсь сортировать факториалы и сначала получать частное двух наибольших, умнажать его на частное двух следующих и т.д. Но что-то все равно кисло получается. Может есть какой-то алгоритм борьбы с такими зверями? Может логарифмы считать? Кто с этим сталкивался?


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
ivashkanet
Дата 9.1.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



Цитата(_Y_ @  9.1.2008,  17:13 Найти цитируемый пост)
Может логарифмы считать

Кстати очень рульная идея. А почему те не хочешь ее реализовать?
Правда с точностью возникнут траблы... но все же лучше чем ничего.

Это сообщение отредактировал(а) ivashkanet - 9.1.2008, 18:17
PM MAIL WWW ICQ   Вверх
PPS05
Дата 9.1.2008, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7





--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
_Y_
Дата 9.1.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 8
Всего: 34



Цитата(ivashkanet @ 9.1.2008,  18:16)
Цитата(_Y_ @  9.1.2008,  17:13 Найти цитируемый пост)
Может логарифмы считать

Кстати очень рульная идея. А почему те не хочешь ее реализовать?


Хочу. Просто она пришла мне в голову в процессе написания поста и, когда я пост отправлял, она там еще дозревала.

PPS05, медленно работает - и без того время рассчета не малое. 


--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
PPS05
Дата 9.1.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Цитата(_Y_ @  9.1.2008,  17:32 Найти цитируемый пост)
 медленно работает

Почему? 100! простым последовательным умножением за доли секунды. Зато точность не потеряешь.


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
Sartorius
Дата 9.1.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



PM MAIL ICQ   Вверх
stab
Дата 9.1.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



Цитата(_Y_ @  9.1.2008,  22:13 Найти цитируемый пост)
Но что-то все равно кисло получается.

почему кисло? они же вроде отлично сокращаться должны исходя из свойств факториала.

Добавлено через 4 минуты и 23 секунды
.. по идее дробь вида 1/K или K/1 остатья должна после сокращаения.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
source777
Дата 9.1.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 1
Всего: 56



Цитата

почему кисло? они же вроде отлично сокращаться должны исходя из свойств факториала.
+1, надо для начала всё посокращать, а потом и длинная математика вряд ли понадобится...

_Y_, ты бы хоть пару примеров привёл, какие реальные данные у тебя будут...

Добавлено через 3 минуты и 50 секунд
Кстати что-то мне подсказывает, что здесь пригодится треугольник Паскаля smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
PPS05
Дата 9.1.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 262
Регистрация: 6.11.2005
Где: Беларусь, Минск

Репутация: нет
Всего: 7



Если не ошибаюсь, можно аналитически выразить степени простых множителей в числителе и знаменателе, тогда легко сократить.

Т.е. обрабатываем по множителю и считаем разложение. N! суть произведение последовательных, а в них мы знаем, что, пр., множитель 2 встречается с двойки шагом 2 и т.д., мы можем посчитать его количество в произведении 1 * 2 * ... * N. 

...Хотя, не думаю, что это проще, чем обычное разложение подфакториального числа.

Это сообщение отредактировал(а) PPS05 - 9.1.2008, 20:42


--------------------
Ушел с форума и не вернулся.
PM MAIL ICQ   Вверх
stab
Дата 9.1.2008, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



_Y_, в общем, задача интересная, хочется написать код. узнать бы полную формулировку задачи. какие ограничения на m, n, F, G?


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
source777
Дата 9.1.2008, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 1
Всего: 56



Цитата

.. по идее дробь вида 1/K или K/1 остатья должна после сокращаения.
неа, 4!*5!/2!*7! = 2/7



--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
stab
Дата 10.1.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: нет
Всего: 48



source777, угу. я собсвенно про ограничения и спросил потом именно по этой причине.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
mmvds
Дата 10.1.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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] для максимального уменьшения числа сомножителей. 

Как приду домой гляну еще раз.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.