Нахождение количества разбиений числа на слагаемые — различия между версиями
м (Новая страница: «Задача: Дано число n, найти [http://oeis.org/A000041 количество его различных разбиений на слагаемые] <…») |
м |
||
Строка 4: | Строка 4: | ||
== Алгоритм за n sqrt(n) == | == Алгоритм за n sqrt(n) == | ||
− | Рассмотрим | + | Рассмотрим самый быстрый алгоритм их нахождения - за <tex> O(n \sqrt{n}) </tex>. Если кто хочет добавить другие алгоритмы, добавьте. |
Итак, обозначим количество таких разбиений за <tex> p(n) </tex>. | Итак, обозначим количество таких разбиений за <tex> p(n) </tex>. | ||
− | + | Рассмотрим бесконечное произведение | |
<tex> (1 + x + x^2 + \dots)(1 + x^2 + x^4 + \dots) \dots (1 + x^k + x^{2k} + \dots) \dots </tex> | <tex> (1 + x + x^2 + \dots)(1 + x^2 + x^4 + \dots) \dots (1 + x^k + x^{2k} + \dots) \dots </tex> | ||
Каждый член произведения получается в результате умножения мономов(одночленов), взятых по одному из каждой скобки. Если в первой скобке взять <tex>x^{m_1}</tex>, во второй — <tex>x^{2m_2}</tex> и т.д., то их произведение будет равно <tex>x^{m_1 + 2m_2 + 3m_3 + \dots}.</tex> Значит, после раскрытия скобок получится сумма мономов вида <tex>x^{m_1 + 2m_2 + 3m_3 + \dots}</tex>. | Каждый член произведения получается в результате умножения мономов(одночленов), взятых по одному из каждой скобки. Если в первой скобке взять <tex>x^{m_1}</tex>, во второй — <tex>x^{2m_2}</tex> и т.д., то их произведение будет равно <tex>x^{m_1 + 2m_2 + 3m_3 + \dots}.</tex> Значит, после раскрытия скобок получится сумма мономов вида <tex>x^{m_1 + 2m_2 + 3m_3 + \dots}</tex>. |
Версия 11:25, 11 января 2011
Задача: Дано число n, найти количество его различных разбиений на слагаемые так что .
Содержание
Алгоритм за n sqrt(n)
Рассмотрим самый быстрый алгоритм их нахождения - за
. Если кто хочет добавить другие алгоритмы, добавьте.Итак, обозначим количество таких разбиений за
.Рассмотрим бесконечное произведение
Каждый член произведения получается в результате умножения мономов(одночленов), взятых по одному из каждой скобки. Если в первой скобке взять , во второй — и т.д., то их произведение будет равно Значит, после раскрытия скобок получится сумма мономов вида .Можно увидеть, что
встретится в полученной бесконечной сумме столько раз, сколькими способами можно представить как сумму Каждому такому представлению отвечает разбиение числа на единиц, двоек и т.д. Так получаются все разбиения, так как каждое из них, конечно, состоит из нескольких единиц, нескольких двоек и т.д. Поэтому коэффициент при равен числу разбиений .Посмотрим теперь на выражения в скобках. Каждое из них — бесконечная геометрическая прогрессия. По формуле ее суммирования:
- ,
и т.д. Теперь наш результат можно записать так:
- (1)
Рассмотрим произведение
, т.е. знаменатель правой части формулы (1). Раскрывая в нём скобки, получим такой результат:Показатели в правой части — пятиугольные числа(при чем тут пятиугольники? o_O ), т.е. числа вида
, а знаки при соответствующих мономах равны . Исходя из этого наблюдения, Эйлер предположил, что должна быть верна:Теорема (Пентагональная теорема Эйлера): |
Доказательство: |
Пентагональная теорема оказалась «крепким орешком» — Эйлер сумел доказать её лишь 14 лет спустя. TODO: скурить доказательство |
Умножим обе части равенства (1) на
и воспользуемся пентагональной теоремой:- (2)
Начнем раскрывать скобки, для наглядности мономы с одинаковыми степенями x пишем друг под другом:
// тут ужасное быдлоформатирование, не знаю как нормально расположить друг под другом
Так как p(0) = 1, то оно сокращается с единицей справа. Так что чтобы выражение (2) было удовлетворено при любом x, все коэффициенты должны быть равны 0(вроде так). Поэтому:
и т.д.
Получаем формулу Эйлера, позволяющую последовательно находить числа
:- .
Ну и объяснение асимптотики
- так как , получаем порядка , а так как находим n-е число, то получаем .