Liczenie podziaªów liczby: algorytm Eulera Wojciech Rytter Podziaªy liczb s¡ bardzo skomplikowanymi obiektami kombinatorycznymi, przedstawimy dwa algorytmy liczenia takich oblektów. Pierwszy prosty algorytm b¦dzie dziaªaª w czasie O(n2 ) i pami¦ci O(n2 ), natomiast √ drugi, pochodz¡cy od Eulera i oparty na tzw. liczbach pentagonalnych, w czasie O(n n) i pami¦ci O(n). Podziaª π = (λ1 , λ2 , . . . λr ) to przedstawienie liczby n = λ1 + λ2 + . . . λr w postaci n = λ1 + λ2 + . . . λr , gdzie λ1 ≥ λ2 ≥ . . . λr > 0 Wszystkie podziaªy liczby n, w porz¡dku antyleksykogracznym, mo»na wygenerowa¢ iteracyjnie nast¦puj¡co: szukamy pierwszego λi ≥ 2 od prawej strony, zast¦pujemy λi przez λi − 1, a pozostaªe cz¦±ci na prawo dajemy tak, aby suks na prawo od λi byª jak najwi¦kszy. Na przykªad podziaªy n = 5 w porz¡dku antyleksykogracznym to: 5, 4 + 1, 3 + 2, 3 + 1 + 1, 2 + 2 + 1, 2 + 1 + 1 + 1, 1 + 1 + 1 + 1 + 1. Oznaczmy przez p(n) liczb¦ podziaªów liczby n, mamy: n: p(n) : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 1 2 3 5 7 11 15 22 30 42 56 77 101 135 176 231 Dla n < 0 przyjmijmy, czysto formalnie, »e p(n) = 0, natomiast p(0) = 1. Oznaczmy przez p(n, k) liczb¦ podziaªów liczby n na k cz¦sci (niezerowych). Algorytm o czasie kwadratowym liczenia p(n) polega na policzeniu ( kwadratowej liczby ) warto±ci p(n, k) na podstawie rekurencji: p(n, k) = 0 dla k < n lub k ≤ 0. p(n, k) = p(n − 1, k − 1) + p(n − k, k) Rekurencja wynika st¡d, »e mamy dwa przypadki: (λk = 1) Wtedy mamy p(n − 1, k − 1) podziaªów pomijaj¡c λk ; (λk > 1) Wtedy mo»emy odj¡¢ jeden od ka»dego λi otrzymuj¡c podziaª liczby n − k na k cz¦±ci. W celu szybszego policzenia p(n) rozwa»ymy podziaªy na ró»ne cz¦±ci, tzn. λ1 > λ2 > . . . λ1 . Niech pe(n) b¦dzie liczb¡ takich podziaªów. Przez peven , peeven , podd , peodd oznaczmy liczb¦ podziaªów na parzyst¡/nieparzyst¡ liczb¦ cz¦±ci (o ró»nych rozmiarach w przypadku pe). Na przykªad pe(15) = 27, peodd (15) = 14, peeven (15) = 13, patrz Rysunek ??. Zauwa»my, »e liczby pe(n) s¡ przewa»nie znacznie mniejsze od liczb p(n) (chocia» na pocz¡tku niewiele si¦ ró»ni¡). Mo»emy rónie» zdeniowa¢ pe(n, k) - liczb¦ podziaªów n na ró»ne cz¦±ci. Na przykªad pe(50, 7) = 522, co Euler policzyª prawie 300 lat temu bez komputera (ani kalkulatora) t¦ konkretn¡ warto±¢ odpwiadaj¡c na pytanie matematyka Ph. Naude. 1 2 Dygresja. podd (n) = pe(n). Kluczow¡ warto±ci¡ jest zdeniowana poni»ej funkcja: ∆(k) = peodd (k) − peeven (k) Funkcje p(n), pe(n) s¡ bardzo skomplikowane, natomiast jest zadziwiaj¡ce, »e ∆ jest bardzo prosta. Pocz¡tkowe warto±ci to: k: ∆(k) : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 1 0 0 -1 0 -1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 -1 Leonard Euler odkryª dwie istotne (dla liczenia p(n)) wªasno±ci funkcji ∆: Wªasno±¢ 1: p(n) speªnia rekurencj¦: p(n) = n X (1) ∆(k) · p(n − k) k=1 Wªasno±¢ 2: jak wida¢ z pocz¡tkowych warto±ci ∆(k) jest ci¡giem bardzo rzadkim (prawie same zera). Jest on obliczalalny ªatwo za pomoc¡ tzw. liczb pentagonalnch, warto±ci ci¡gu to zera, +1 lub -1. √ Z tego, »e ci¡g ∆(n) jest bardzo rzadki wynika, »e dla policzenia p(n) tylko O( n) warto±ci k jest niezerowych. √ Zatem p(n) liczymy w √ czasie O( n) znaj¡c p(n − 1), p(n − 2), . . . p(0). W sumie mamy algorytm dziaªaj¡cy w czasie O(n n) i pami¦ci O(n), o ile potramy ª¡two wylistowa¢ niezerowe warto±ci ∆(k). Leonard Euler najpierw odkryª wªasno±ci ∆ heurystycznie, a dopiero po 10 latach znalazª dowód (by¢ mo»e wcze±niej nie miaª czasu). Zdeniujmy liczby pentagonalne (pi¦ciok¡tne) pent(i) = (3i − 1)i/2 Nazwa pochodzi od interpretacji geometrycznej, podobnie jak dla liczb trójk¡tnych. Mamy: pent(i) = pent(i − 1) + 3i + 1 Liczby pentagonalne b¦dziemy rónie» nazywa¢ liczbami trapezowymi pierwszego typu, a liczby pent(i) + i nazywamy liczbami trapezowymi drugiego typu, patrz lewy/prawy trapez na Rysunku 1. i: pent(i) : 1 2 3 4 5 6 7 1 5 12 22 35 51 70 Ponadto zdenujmy wspóªczynniki pentagonalne: e(k) = (−1)i+1 if k = pent(i) lub k = pent(i) + i 0 w przeciwnym przypadku. (2) Lemat Kluczowy. (3) ∆(k) = e(k). Mo»emy teraz zapisa¢ algorytm (jedn¡ iteracj¦) liczenia p(n) nast¦puj¡co: p(n) = X (4) (−1)i+1 · ( p(n − pent(i)) + p(n − pent(i) − i) ) i≥1 √ W równaniu tym korzystamy jedynie z warto±ci i takich, »e pent(i) ≤ n, mamy jedynie O( n) takich warto±ci. Liczby pent(i) mo»emy ªatwo policzy¢. Twierdzenie. √ Liczby p(1), p(2), ..p(n) mo»emy policzy¢ w czasie O(n n) i pami¦ci O(n). 3 Dowód równania 1 Uzasadnienie jest sprytn¡ manipulacj¡ algebraiczn¡, korzystaj¡c¡ z tego »e dwa wielomiany b¦d¡ce t¡ sam¡ funkcj¡ maj¡ takie same wspóªczynniki przy tych samych pot¦gach zmiennej. Sztuczka polega na tym, »eby te same wielomiany przedstawi¢ na dwa ró»ne sposoby, z jednego wymno»enia otrzymujemy wynik, który przyrównujemy do wymno»enia w innej formie. Zdeniujmy: φ(x) = (1 + x + x2 + . . . xn ), ψ(x) = 1 − x. W1 (x) = n Y φ(xi ), W2 (x) = i=1 n Y ψ(xi ). i=1 Wprowad»mu notacj¦ = dla równo±ci wielomianów z dokªadno±ci¡ do pot¦g wy»szych ni» n, inaczej mówi¡c bierzemy reszt¦ z dzielenia przez xn+1 . Zauwa»my, »e zachodzi dosy¢ ªatwe równanie: n (5) n W1 (x) · W2 (x) = 1. Powy»sza równo±¢ troch¦ przypomina sytuacj¦ w równo±ci (1 + x)(1 − x) = 1 − x2 . Przedstawimy teraz te same wielomiany w innej formie. n n W1 (x) = p(0)x0 + p(1)x1 + p(2)x2 + ..p(n)xn , W2 (x) = 1 − ∆(1)x2 − ∆(2)x2 ... − ∆(n)xn . (6) Z równania 5 dla n ≥ 1 wynika, »e wspóªczynnik przy xn w iloczynie W1 (x) · W2 (x) wynosi zero, korzystaj¡c z równania 6 mo»emy ten wspóªczynnik przedstawi¢ jako kombinacje iloczynów p(i), ∆(j), gdzie i + j = n, w rezultacie otrzymujemy: p(n) · 1 − p(n − 1) · ∆(1) − p(n − 2) · ∆(2) − p(n − 3) · ∆(3) . . . − ∆(n) · p(0) = 0 St¡d wynika bezpo±rednio równanie 1. Dowód kluczowego lematu (równania 3) W sekcji tej rozwa»amy tylko podziaªy o ró»nych cz¦±ciach. Dwód kluczowego lematu wymaga rozwa»enia interpretacji geometrycznej podziaªów. Podziaª liczby mo»e by¢ przedstawiony w postaci diagramu zwanego diagramem Ferrersa, w kolejnym wierszu liczba elementów odpowiada liczbie λj . Diagramy Ferrersa dla przykªadowych podziaªów liczb 22 i 26 s¡ przedstawione na rysunku 1. S¡ to bardzo szczególne podziaªy, które b¦dziemy nazywa¢ trapezowymi. Podziaª trapezowy rz¦du k pierwszego typu jest postaci (k + k − 1, k + k − 2, k + k − 3, . . . , k) a drugiego typu postaci (k + k, k + k − 1, k + k − 1, . . . , k + 1). Obserwacja . Podziaª trapezowy maj¡cy pen(k) lub pen(k) + k elementów skªada si¦ z k cz¦±ci. Rysunek 1: Trapezy rz¦du k, gdzie k = 4, pierwszego typu ma pen(k) elementów, a drugiego typu ma pen(k) + k elementów. Podziaªy odpowiadaj¡ce tego typu trapezom nazywamy podziaªami trapezowymi. Liczb¦ n nazywamy liczb¡ trapezow¡ gdy istnieje podziaª n b¦d¡cy trapezowym, zawsze jest co najwy»ej jeden taki podziaª dla danego n. 4 Obserwacja. Liczby trapezowe s¡ postaci pen(j) lub pen(j) + j . Dla trapezu π przez k(π) oznaczmy liczb¦ elementów na prawej diagonali poczynaj¡c od górnej prawej strony, je±ªi odpowiadaj¡cym podziaªem jest (a1 , a2 , . . . ar ) to k(π) jest najwi¦ksz¡ liczb¡ naturaln¡ tak¡, »e ai − 1 = ai+1 dla i = 1, 2, . . . k(π) − 1. Przez h(π) = ar oznaczmy liczb¦ elementów w najmniejszej cz¦±ci. Je±li podziaª nie jest trapezowy oraz h(π) ≤ k(π) to F (π) jest podziaªem powstaj¡cym z π przez dodanie do ka»dej z pierwszych k(π) cz¦±ci po jednym elemencie i usuni¦cie najmniejszej (dolnej) cz¦±ci, patrz Rysunek 2. Rysunek 2: Dziaªanie funkcji F . Podziaªy o parzystej/nieparzystej liczbie cz¦sci nazywamy parzystymi/nieparzystymi. Zauwa»my, »e funkcja F zmienia parzysto±¢ podziaªu. Zachodzi nast¦puj¡cy dosy¢ oczywisty fakt. F . F jest bijekcj¡ mi¦dzy nietrapezowymi podziaª¡mi n z h(p) ≤ k(π) i nietrapezowymi podziaªami n z h(p) > k(π). Wªasno±¢ funkcji 1 gdy n jest nieparzyst¡ liczb¡ trapezow¡ −1 gdy n jest parzyst¡ liczb¡ trapezow¡ peodd (k) − peeven (k) = 0 w przeciwnym przypadku. (7) Z powy»szej wªasno±ci wynika: peodd (k) − peeven (k) = e(k) dla kazdegok. Rysunek 3: Zgrupowanie podziaªów nietrapezowych liczby n = 15 korzystaj¡c z funkcji F . Nieoczekiwana relacja mi¦dzy funkcjami p(n) i σ(n) Jako ciekawostk¦ podamy, bez uzasadnienia, pewien zwi¡zek dwóch pozornie odlegªych funkcji p(n), σ(n), gdzie σ(n) oznacza sum¦ dzielników liczby n (wª¡cznie z n). Mamy n: σ(n) : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 0 1 3 4 7 6 12 8 15 13 18 12 28 14 24 24 31 5 Dla funkcji σ zachodzi prawie taka sama rekurencja jak dla p(n), jedyna ró»nica to zast¡pienie p(0) przez n we wzorze 1. Funkcja σ(n) speªnia rekurencj¦: σ(n) = n−1 X ∆(k) · σ(n − k) + ∆(n) · n. (8) k=1 Przykªad. Dla n = 15 mamy: σ(15) = σ(15 − 1) + σ(15 − 2) − σ(15 − 5) − σ(15 − 7) + σ(15 − 12) + 15 = 24 + 14 − 18 − 15 + 4 + 15 = 24. p(15) = p(15 − 1) + p(15 − 2) − p(15 − 5) − p(15 − 7) + p(15 − 12) + p(0) = 135 + 101 − 42 − 22 + 3 + 1 = 176. Poniewa» warto±ci ∆(k) s¡ zwi¡zane z liczbami pentagonalnymi tak jak poprzednio, to wszystkie warto±ci √ σ(n), σ(n − 1), . . . σ(1) mo»na policzy¢ w czasie O(n n) i pami¦ci O(n) tak jak poprzednio zrobili±my to dla warto±ci p(n). Zachodzi równie» inny zadziwiaj¡cy zwi¡zek: σ(n) = n X k · ∆(k) · p(n − k). (9) k=1 Jesli n = Q i pm i , gdzie pi liczby pierwsze to Y m +1 Y σ(n) = (pi i − 1) / (pi − 1) Wydaje sie ze liczenie σ dla wszystkich liczb 1, 2, . . . n jednak jest szybsze korzystajac ze wzoru 8 i liczb pentagonalnych ni» korzystaj¡c z ostatnego wzoru. Liczby σ(n) s¡ zwi¡zane z tzw. liczbami doskonaªymi, tzn. takimi »e σ(n) = 2n. Wiadomo, ze n parzyste jest doskonaªe wtw. gdy n = 2p−1 (2p − 1), gdzie p, 2p − 1 s¡ pierwsze, np. dla p = 11213, p = 30402456 (43-cia liczba doskonaªa). Pierwsze 7 liczb doskonaªych to: 6, 28, 496, 8128, 33550336, 8 589 869 056, 137 438 691 328. Pierwsze 4 liczby doskonaªe policzyª ju» Euklides. Kilka nast¦pnych Euler. Potem ju» byª potrzebny komputer. Nie wiadomo czy liczb parzystych doskonaªych jest nieskonczenie wiele ani te» czy istnieje cho¢by jedna nieparzysta liczba doskonaªa. Dygresja. Wi¦cej informacji na temat liczenia podziaªów mo»na znale»¢ w: http://www.math.psu.edu/vstein/alg/antheory/preprint/andrews/chapter.pdf http://www.rowan.edu/colleges/csm/departments/math/facultysta/osler/ 89%20Surprising%20Connection%20Between%20Partitions%20and%20Divisors.pdf.pdf http://hkumath.hku.hk/ mks/EulerHeuristicReasoning.pdf