Liczenie podziaªów liczby: algorytm Eulera

advertisement
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
Download