2. Тождество Эйлера и число разбиений
Пусть n – натуральное число. Обозначим через p(n) число способов, которыми можно представить n в виде суммы натуральных слагаемых (при этом слагаемые в суммах могут повторяться, и представления, различающиеся лишь порядком слагаемых, считаются одинаковыми). Например:
p(1) = 1; | |
p(2) = 2 | (2 = 2; 2 = 1 + 1); |
p(3) = 3 | (3 = 3; 3 = 2 + 1; 3 = 1 + 1 + 1); |
p(4) = 5 | (4; 3 + 1; 2 + 2; 2 + 1 + 1; 1 + 1 + 1 + 1); |
p(5) = 7 | (5; 4 + 1; 3 + 2; 3 + 1 + 1; 2 + 2 + 1; 2 + 1 + 1 + 1; 1 + 1 + 1 + 1 + 1). |
Числа p(n) входят во многие математические формулы, и их полезно уметь вычислять. Но как это сделать? Попробуйте, например, найти p(10). Вам придется изрядно повозиться, и, если повезёт, вы найдете правильный ответ: 42. А если нужно знать, скажем, p(50)? На помощь приходит тождество Эйлера.
Сначала немного «теории». Положим
π(x) = 1 + p(1)x + p(2)x2 + p(3)x3 + ... = 1 + x + 2x2 + 3x3 + 5x4 + 7x5 + ...
Как и φ(x), π(x) – функция, определённая при –1 < x < 1. Но, опять-таки, нас она интересует только как степенной ряд.
Теорема. Ряды φ(x) и π(x), взаимно обратны, то есть
φ(x) · π(x) = 1.
Вы понимаете, в чем смысл этого равенства? Степенные ряды можно перемножать:
(a0 + a1x + a1x2 + ...)(b0 + b1x + b1x2 + ...) = a0b0 + a0b1x + a0b2x2 + ... + | |
+ a1b0x + a1b1x2 + a1b2x3 + ... + a2b0x2 + a2b1x3 + a2b2x4 + ... + | |
. . . . . . . . . . . . . . . . . . . . . . . | |
= a0b0 + (a0b1 + a1b0)x + (a0b2 + 2a1b1 + a2b0)x2 + ...; |
наше утверждение означает, что если перемножить таким образом ряды φ(x) и π(x), то полученное произведение сведётся к 1: коэффициенты при x, x2, x3 ... будут равны нулю.
Доказательство.
1 φ(x) | = | 1 1 – x | · | 1 1 – x2 | · ... · | 1 1 – xk | · ... = |
= (1 + x + x2 + x3 + ...)(1 + x2 + x4 + x6 + ...)×...×(1 + xk + x2k + x3k + ...)... .
При раскрытии скобок в последнем произведении получится сумма всевозможных выражений вида
a1 | 2a2 | kak | ||||
x | x | ... x | , |
где a1 ..., ak – целые неотрицательные числа. Таким образом, xn войдёт в эту сумму столько раз, сколькими способами n можно представить в виде
a1 + 2a2 + ... + kak.
Но это представление можно переписать так:
1 + ... + 1 | + | 2 + ... + 2 | + ... + | k + ... + k | . |
a1 | a2 | ak |
Мы видим, что представлений числа n в виде a1 + 2a2 + ... + kak столько же, сколько есть его представлений в виде суммы натуральных слагаемых, то есть p(n). Таким образом, коэффициент при xn в нашем произведении равен p(n), то есть 1/φ(x) = π(x). Теорема доказана.
Положив для удобства p(0) = 1, напишем
(1 – x – x2 + x5 + x7 + ...)(1 + p(1)x + p(2)x2 + ...) = 1
(коэффициенты в первом множителе пишутся согласно тождеству Эйлера!). Раскроем скобки и приравняем нулю коэффициенты при x, x2, x3, ..., xn в левой части. Получим:
p(1) – p(0) = 0; |
p(2) – p(1) – p(0) = 0; |
p(3) – p(2) – p(1) = 0; |
. . . . . . . . . . . . . . . . . . . . . . |
p(n) – p(n–1) – p(n–2) + p(n–5) + p(n–7) – ... = 0 |
(в левой части последней формулы нужно писать слагаемые до тех пор, пока аргумент у p остаётся неотрицательным). Итак,
p(n) = p(n–1) + p(n–2) – p(n–5) – p(n–7) + ... .
Эта формула позволяет быстро составить довольно длинную таблицу чисел p(n). Вот практический совет, как это сделать. Возьмите лист клетчатой бумаги – лучше всего двойной тетрадный лист. Отрежьте вдоль его длинной стороны полоску шириной 3–4 клетки. Положите эту полоску перед собой вертикально и у левого среза в нижней клетке поставьте какой-нибудь знак, скажем звёздочку. Затем, двигаясь вверх, поставьте в первой клетке +, во второй +, в пятой –, в седьмой –, в двенадцатой +, в пятнадцатой + и т.д., насколько хватит длины полоски (рис. 1). Оставшуюся часть листа также положите перед собой вертикально и, отступя 10–15 клеток от её левого среза, проведите на ней вертикальную черту – сверху донизу. В клетки, прилегающие к черте слева, двигаясь сверху вниз, впишите уже известные вам числа p(n), начиная с p(0): 1, 1, 2, 3, 5, 7. Чтобы найти следующее значение, приложите отрезанную полоску справа к вертикальной черте так, чтобы звёздочка оказалась против первой пустой клетки. Теперь из суммы чисел, стоящих против плюсов, вычтите сумму чисел, стоящих против минусов. Что получится – впишите в клетку против звездочки: это – следующее значение функции p(n). Опустите полоску на одну клетку вниз и повторите то же самое. И так далее. Через несколько минут вы получите колонку чисел p(n) высотой в ваш лист.
Рис. 1 | Рис. 2 |
Пользуясь этим рецептом, я нашел числа p(n) для n ≤ 50. На это потребовалось – честно, по часам – 17 минут. (Несколько первых шагов вычисления я привожу на рисунке 2; красные числа – это новые значения p(n).) В частности,
p(50) = 204226.
Представьте себе, сколько потребовалось бы времени для нахождения этого числа кустарным способом!
0 комментариев