![]() |
|
![]() ![]() ![]() |
|
UndeadBlow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2011 Репутация: нет Всего: нет |
Всем привет, подскажите, кто сможет: Не могу сообразить, как решить задачу (вычислительно, естественно, не на листке):
Найти все комбинации m по n, при этом m и n могут быть очень большими, вплоть до нескольких тысяч. Вернуть нужно otvet modulo 1 000 000, соответственно. Конечно, просто применить обычную формулу сочетаний с такими числами я не могу, а других вариантов не знаю. Заранее спасибо. |
|||
|
||||
Pavia |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
||||
|
||||
UndeadBlow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2011 Репутация: нет Всего: нет |
Спасибо, увы, плюсануть не дает форум, но это то, что нужно.
|
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 2 Всего: 49 |
||||
|
||||
UndeadBlow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2011 Репутация: нет Всего: нет |
Тему можно закрывать, задачу решил.
Подход из файла товарища Pavia работает. Кратко, общая суть для ленивых: ![]() Сокращаем m! снизу и n! сверху. (например снизу 3!, сверху 6!, после сокращения снизу будет 1, сверху 4 * 5 * 6). Далее раскладываем числитель (уже) и знаменатель на множители. Ищем общий делитель для каждой пары числителя и знаменателя и сокращаем, до тех пор, пока в знаменателе не останутся одни единицы. В рамках этой задачи это возможно всегда. В итоге останется только последовательность множителей в числителе. Ну, дальше я просто использовал длинную арифметику. Может и есть способ лучше ![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
-------------------- qqq |
|||
|
||||
UndeadBlow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2011 Репутация: нет Всего: нет |
А как его использовать в данной задаче? |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
UndeadBlow |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 15.12.2011 Репутация: нет Всего: нет |
Обалдеть, не знал о его таких свойствах, нехило ![]() Я умею вычислять треугольник Паскаля, огромное вам спасибо. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |