Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сочетания с очень большими числами 
:(
    Опции темы
UndeadBlow
Дата 8.4.2013, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2011

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



Всем привет, подскажите, кто сможет: Не могу сообразить, как решить задачу (вычислительно, естественно, не на листке):

Найти все комбинации m по n, при этом m и n могут быть очень большими, вплоть до нескольких тысяч.
Вернуть нужно otvet modulo 1 000 000, соответственно. 
Конечно, просто применить обычную формулу сочетаний с такими числами я не могу, а других вариантов не знаю.

Заранее спасибо.
PM MAIL   Вверх
Pavia
Дата 8.4.2013, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Файл много страничный.

Присоединённый файл ( Кол-во скачиваний: 15 )
Присоединённый файл  2000.tif 559,93 Kb
PM MAIL   Вверх
UndeadBlow
Дата 8.4.2013, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2011

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



Спасибо, увы, плюсануть не дает форум, но это то, что нужно.
PM MAIL   Вверх
Фантом
Дата 8.4.2013, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(UndeadBlow @  8.4.2013,  23:50 Найти цитируемый пост)
Спасибо, увы, плюсануть не дает форум, но это то, что нужно. 

Сейчас плюсанем.  smile 
PM   Вверх
UndeadBlow
Дата 9.4.2013, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2011

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



Тему можно закрывать, задачу решил. 
Подход из файла товарища Pavia работает. Кратко, общая суть для ленивых:
user posted image
Сокращаем m! снизу и n! сверху. (например снизу 3!, сверху 6!, после сокращения снизу будет 1, сверху 4 * 5 * 6).
Далее раскладываем числитель (уже) и знаменатель на множители. Ищем общий делитель для каждой пары числителя и знаменателя и сокращаем, до тех пор, пока в знаменателе не останутся одни единицы. В рамках этой задачи это возможно всегда.
В итоге останется только последовательность множителей в числителе. Ну, дальше я просто использовал длинную арифметику. Может и есть способ лучше smile
PM MAIL   Вверх
maxim1000
Дата 9.4.2013, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



с треугольником Паскаля, ИМХО, проще

(естественно, там всё надо считать по модулю)


--------------------
qqq
PM WWW   Вверх
UndeadBlow
Дата 9.4.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2011

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



Цитата(maxim1000 @ 9.4.2013,  20:41)
с треугольником Паскаля, ИМХО, проще

(естественно, там всё надо считать по модулю)

А как его использовать в данной задаче?
PM MAIL   Вверх
maxim1000
Дата 10.4.2013, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



m-е число в n-й строке треугольника как раз и равно количеству сочетаний из n по m

сам треугольник просто иллюстрирует схему для вычисления количеств сочетаний:

сначала вычисляем одну строку - C(0,0)=1
а на каждой следующей первое и последнее число приравниваем 1, а внутри используем формулу C(n,m)=C(n-1,m)+C(n-1,m-1)

(ну и всё это по модулю)


--------------------
qqq
PM WWW   Вверх
UndeadBlow
Дата 10.4.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 15.12.2011

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



Цитата(maxim1000 @ 10.4.2013,  07:55)
m-е число в n-й строке треугольника как раз и равно количеству сочетаний из n по m

сам треугольник просто иллюстрирует схему для вычисления количеств сочетаний:

сначала вычисляем одну строку - C(0,0)=1
а на каждой следующей первое и последнее число приравниваем 1, а внутри используем формулу C(n,m)=C(n-1,m)+C(n-1,m-1)

(ну и всё это по модулю)

Обалдеть, не знал о его таких свойствах, нехило smile
Я умею вычислять треугольник Паскаля, огромное вам спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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