Ćwiczenia z teoria liczb, ciąg dalszy (pt 15 maja) Matematyka

advertisement
Ćwiczenia z teoria liczb, ciąg dalszy (pt 15 maja)
Matematyka Dyskretna
Przypomnienie: Mówimy a⊥b (a jest względnie pierwsze z b) jeśli N W D(a, b) = 1.
(Zero jest podzielne przez każdą liczbę naturalną, więc jest względnie pierwsze tylko z 1).
Zbiór liczb względnie pierwszych z n oznaczamy Z∗n (na Wikipedii (Z/nZ)× ). Mnożenie
dwóch liczb w Z∗n daje znowu liczbę ⊥n. Dla każdej liczby a⊥n istnieje dokładnie jedna
liczba a−1 taka, że aa−1 ≡ a−1 a ≡ 1 (mod n) (np. 13 mod 10 ≡ 7, więc 23 mod 10 ≡ 4 i
rzeczywiście 4 · 3 mod 10 = 2; ale żadna liczba pomnożona przez 2 nie da 1 mod 10,
więc 2−1 mod 10 nie ma sensu, dokładnie tak jak dzielenie przez zero). Z tego wynika, że
Z∗n tworzy grupę ze względu na mnożenie, czyli póki posługujemy się liczbami względnie
pierwszymi z n modulo n to można normalnie mnożyć i dzielić.
Małe tw. Fermata: ap−1 ≡ 1 (mod p) dla p pierwszego i a⊥p (ten ostatni warunek
znaczy po prostu, że a nie jest podzielne przez p, ale lepiej tak go zapamiętać).
Ogólniej tw. Eulera aϕ(n) ≡ 1 (mod n) dla a⊥n.
Tu ϕ(n) to liczba liczb względnie pierwszych z n, czyli ϕ(n) = |Z∗n |. Np. ϕ(p) = p − 1
dla pierwszych p, bo wszystkie liczby od 1 do p − 1 są ⊥p. Generalnie łatwo pokazać
ϕ(pα ) = pα − pα−1 = pα (1 − p1 ) oraz że dla a⊥b zachodzi ϕ(a · b) = ϕ(a) · ϕ(b). Więc jak
znamy rozkład liczby n = pα1 1 pα2 2 · · · , to łatwo policzyć φ(n) = n · (1 − p11 ) · (1 − p12 ) · · · .
Np. φ(100) = φ(22 · 52 ) = 100 · (1 − 12 ) · (1 − 15 ) = 40.
To w szczególności daje metodę na liczenie odwrotności modulo: jeśli a⊥n, to a−1 ≡
aφ(n)−1 (mod n), no bo iloczyn aφ(n)−1 · a ≡ 1 (mod n) z tw. Eulera. Jeśli rozkładu nie
znamy, to szybsza metoda wynika z rozszerzonego algorytmu Euklides: skoro N W D(a, n) =
1, to znajduje on liczby x, y takie, że ax + ny = 1. Czyli ax ≡ 1 (mod n) i x (mod n)
jest szukaną odwrotnością.
Q1.: Udowodnij, że iloczyn trzech kolejnych liczb naturalnych, z których środkowa jest
sześcianem, dzieli się przez 504.
Przypomnienie: ChTwoR mówi, że dla n = n1 · n2 · · · gdzie ni ⊥nj , mamy bijekcję
między resztami mod n a ciągami reszt mod ni . Inaczej mówiąc każdy układ równań x ≡ a1
(mod n1 ), x ≡ a2 (mod n2 ), · · · ma dokładnie jedno rozwiązanie x ∈ {0, . . . , n − 1}.
Q2.: Wiemy z tw. Eulera, że ∀a⊥100 aφ(100) ≡ 1 (mod 100). Znajdź liczbę 0 < λ <
φ(100) = 40 taką, że ∀a⊥100 aλ ≡ 1 (mod 100). Jak użytą metodę uogólnić do n innych
niż 100?
Q3.: Pokaż, że istnieje 2011 kolejnych liczb naturalnych, z których każda jest podzielna
przez jakiś sześcian.
A1.: Chcemy pokazać, że dla każdego n ∈ N zachodzi 504 | (n3 − 1)n3 (n3 + 1). Łatwo
znaleźć rozkład 504 = 8 · 63 = 8 · 9 · 7, czyli wystarczy pokazać, że dla każdego n mamy
8 | (n3 − 1)n3 (n3 + 1) i 7 | (n3 − 1)n3 (n3 + 1) i 9 | (n3 − 1)n3 (n3 + 1) (czyli możemy się
skupić na podzielności przez potęgę liczby pierwszej, a drobniej już raczej trudno będzie
patrzeć, bo z tego że dwa razy pokażemy podzielność przez 3 rzadko wynika podzielność
przez 9).
To, że 8 | (n3 − 1)n3 (n3 + 1) widać z tego, że albo n jest parzyste i wtedy 8 | n3 , albo
jest nieparzyste i wtedy jeden z nawiasów jest podzielny przez 4 a drugi przez 2 albo
odwrotnie.
Sprobójmy pokazać 7 | (n3 − 1)n3 (n3 + 1). Jeśli 7 dzieli n to ok, a jeśli nie to może
dzielić tylko (n3 − 1)(n3 + 1). Tu można zauważyć, że (n3 − 1)(n3 + 1) = n6 − 1. Teraz z
małego tw. Fermata wynika, że n6 ≡ 1 (mod 7), skoro n nie jest podzielne przez 7. Czyli
rzeczywiście 7 | n6 − 1.
Podobnie dla 9 | (n3 − 1)n3 (n3 + 1): albo 3 dzieli n i jest ok, albo nie dzieli i wtedy n3
nic nie pomoże. Czyli chcemy pokazać w tym drugim przypadku 9 | n6 −1 i to rzeczywiście
zachodzi z tw. Eulera, bo założyliśmy, że 3 nie dzieli n oraz liczymy φ(9) = 9(1 − 31 ) = 6.
Inne rozwiązanie to sprawdzić, że 13 , 23 , . . . , b9 − 1c3 (mod 9) przystają do −1, 0 lub
1, ale jest to w ogólności bardziej pracochłonne no i nie widać dlaczego się akurat tak
zgodziło.
A2.: Musimy jakoś skorzystać z a⊥100. Potrafimy z tw. Eulera powiedzieć, że wtedy
np.:
aφ(10) ≡ 1 (mod 10)
aφ(4) ≡ 1
(mod 4)
aφ(25) ≡ 1
(mod 25)
No i jak by tu skorzystać z różnych kongruencji żeby dostać jedną? Narzuca się ChTwoR:
jeśli pokażemy, że
aλ1 ≡ 1 (mod n1 )
a λ2 ≡ 1
(mod n2 )
dla jakichś n1 ⊥n2 , to z tego np. wynika, że
a λ1 λ2 ≡ 1 λ2 ≡ 1
(mod n1 )
a λ1 λ2 ≡ 1 λ1 ≡ 1
(mod n2 )
Z ChTwoR aλ1 λ2 jest jedyną liczbą (mod n1 n2 ), która daje reszty 1 (mod ni ), ale taką
liczbą jest 1, więc aλ1 λ2 ≡ 1 (mod n1 n2 ).
Żeby to wykorzystać musimy mieć n1 ⊥n2 , więc możemy skorzystać tylko z kongruencji
dla 4 i dla 25. I rzeczywiście φ(4) = 2, φ(25) = 20 , czyli mamy
a2 ≡ 1
(mod 4)
a20 ≡ 1
(mod 25)
Potegując pierwszą do dziesiątej dostaniemy
a20 ≡ 1
(mod 4)
a20 ≡ 1
(mod 25)
a20 ≡ 1
(mod 100)
czyli z ChTwoR
Więc λ = 20 spełnia warunki zadania.
αi
Ogólniej każdą liczbę n możemy rozłożyć na n = pα1 1 pα2 2 · · · , użyć kongruencji aφ(pi ) ≡
1 (mod pαi i ), wszystkie dopotęgować żeby uzyskać wspólny wykładnik i użyć ChTwoR,
żeby dostać
α1
α2
aN W W (φ(p1 ),φ(p2 ),... ) ≡ 1 (mod n)
A3.: Jak stwierdzenie jest prawdziwe dla 2011, to jest też prawdziwe dla 2010, więc
raczej w liczbie 2011 nie ma nic specjalnego, chcemy po prostu pokazać, że można znaleźć
dowolnie wiele kolejnych liczb podzielnych przez sześcian.
Jak nie mamy pomysłu można spróbować to inaczej zapisać. Chcemy znaleźć taką
liczbę x, że n30 dzieli x, n31 dzieli x + 1, i tak dalej, n3i dzieli x + i. Czyli chcemy znaleźć
liczbę x, która spełnia różne podzielności, w jakimś sensie. Tu się powinno już narzucać
ChTwoR. Szukamy takiej liczby x, że x ≡ −i (mod n3i ) (dla i = 0, . . . , 2010 i dowolnych
ni ). No i rzeczywiście, jeśli wybierzemy względnie pierwsze liczby n0 , . . . , n2010 (a za takie
możemy wziąć po prosu kolejne liczby pierwsze), to istnieje dokładnie jedno rozwiązanie
x ∈ {0, . . . , n30 n31 · · · n32010 − 1} zestawu kongruencji x ≡ −i (mod n3i ).
Q4.: Drzewo Sterna-Brocota zawierające nieskracalne ułamki powstaje w następujący
sposób. Zaczynamy od ciągu [ 01 , 10 ] (o 10 myślimy jako ∞). W każdym kroku między każde
0
0
dwie kolejne liczby ab oraz ab0 wsadzamy liczbę a+a
b+b0 . Czyli po pierwszym kroku mamy
[ 01 , 11 , 10 ], po kolejnych
0 1 1 2 1
[ , , , , ]
1 2 1 1 0
0 1 1 2 1 3 2 3 1
[ , , , , , , , , ]
1 3 2 3 1 2 1 1 0
Można to też widzieć jako następujące drzewo:
Pokaż, że: a) po każdym kroku liczby występują rosnąco.
b) Wszystkie występujące ułamki są skrócone.
c) Jak znaleźć liczbę w tym drzewie, jeśli istnieje?
d∗ ) Pokaż, że każdy nieskracalny ułamek jest w drzewie dokładnie raz.
A4.: a) Skoro konstrukcja jest indukcyjna, to dowód pewnie też. Jeśli po jakimś kroku
0
0
mamy kolejno ab < ab0 , to wystarczy sprawdzić ab < a+a
b+b0 (i tak samo drugą stronę). Ale
0
to jest równoważne ab + ab0 < ab + a0 b, czyli ab0 < a0 b, czyli ab < ab0 . (Formalnie 10 trzeba
by rozważyć osobno, ale darujmy sobie).
b) Ułamek ab jest skrócony wtw gdy a⊥b. Ale niestety taka teza nie przechodzi
indukcyjnie. Trzeba spróbować ją przeformułować i wzmocnić. Teza znaczy to samo co
N W D(a, b) = 1, więc może warto powiedzieć, że jest też równoważna stwierdzeniu, że
istnieją liczby x, y ∈ N takie, że ax + by = 1. To może spełniają zawsze jakąś konkretną
równość? Rzeczywiście kolejne liczby w ciągu wyglądają na powiązane i jak spojrzeć i
popróbować to widać, że zawsze dwie kolejne liczby po danym kroku spełniają a0 b−ab0 = 1.
I taka teza już łatwo przechodzi indukcyjnie.
c) Skoro z a) wiemy, że liczby mniejsze od danej leżą na lewo od niej, większe na prawo, to
0
można zrobić wyszukiwanie binarne. Szukając xy zaczniemy od przedziału ( ab , ab0 ) = ( 01 , 10 )
0
0
0
i testujemy środek. Jeśli xy < a+a
b0 := b + b0 , jeśli > to
b+b0 , to zmieniamy a := a + a ;
zmieniamy analogicznie a, b, jeśli równe to znaleźliśmy. Zachowujemy tu niezmiennik, że
a
a a0
x
a0
b < y < b0 oraz b , b0 są kolejnymi liczbami w ciągu po kolejnym kroku. Podobnie można
szukać przybliżeń dowolnej liczby rzeczywistej: szukamy tym algorytmem i kończymy
po małej liczbie kroków. Właśnie po to oryginalnie Brocot wymyślił to drzewo, bo
potrzebował przybliżać rzeczywiste stosunki ilorazami liczb zębów w kołach zębatych.
d) Generalnie łatwo zauważyć, że ułamki w kolejnych krokach ’rosną’, konkretnie na
pewno jedna z liczb a, a0 , b, b0 w każdym kroku algorytmu rośnie i żadna nie maleje. Więc
wystarczyłoby znaleźć takie wyrażenie rosnące razem z nimi, które byłoby ograniczone z
góry przez coś zależącego tylko od x i y – gdyby taki niezmiennik był spełniony, to liczby
nie mogłyby rosnąć dowolnie, więc algorytm musiałby kiedyś skończyć. Możemy spróbować
0
z znanych już niezmienników coś wywnioskować: ab < xy < ab0 oraz a0 b − ab0 = 1 dają nam
dwie nierówności i równość, więc mamy dużą szansę znaleźć odpowiednią kombinację
liniową. Chcemy tylko wyrażenia rosnące z a, b, a0 , b0 , więc nierówności przedstawmy
jako ay < bx, b0 x < a0 y, korzystając z całkowitości 1 + ay ¬ bx, 1 + b0 x ¬ a0 y. Oddzielić
zależność od a, b, a0 , b0 od zależności od x, y możemy biorąc następującą kombinację liniową:
mnożymy pierwszą nierówność przez a0 , drugą przez a i dodając mamy: a+a0 +a0 ay+ab0 x ¬
a0 bx + aa0 y, bo teraz stosując równość z b) i skracając mamy a + a0 ¬ (a0 b − ab0 )x = x.
Podobnie mnożąc przez b0 i b dostaniemy b + b0 ¬ (ba0 − a0 b)y = y.
Czyli a + a0 + b + b0 ¬ x + y. Wyrażenie po lewej rośnie w każdym kroku, po prawej się
nie zmienia, ale nierówność jest spełniona w każdym kroku, więc kroków jest skończenie
wiele, czyli w co najwyżej x + y krokach znajdziemy ułamek xy w drzewie. Na wiki jest
naszkicowane jak ścieżka w drzewie odpowiada ułamkowi łańcuchowemu, co daje inny
dowód, może bardziej konkretny i naoczny, że znajdziemy liczbę xy gdzieś w drzewie.
Tak więc liczby wymierne można reprezentować jako ciąg 0-1 mówiący czy idziemy w
lewo czy w prawo w drzewie, co może się przydać w scenariuszach gdzie potrzebujemy
porównywać, wyszukiwać i przybliżać liczby skróconymi, możliwie krótkimi ułamkami.
Download