Wokół Problemu Steinhausa z teorii liczb Ciągi kolejnych sum

Transkrypt

Wokół Problemu Steinhausa z teorii liczb Ciągi kolejnych sum
Wokół Problemu Steinhausa z teorii liczb
Konferencja „MathPAD 2005”
Piotr Jędrzejewicz
Wydział Matematyki i Informatyki
Uniwersytetu Mikołaja Kopernika w Toruniu
Celem referatu jest przedstawienie sposobu wykorzystania MuPADa do
analizy uogólnień następującego zadania z książki [1].
Ciekawa własność liczb. Napiszmy dowolną liczbę naturalną w dziesiątkowym układzie pozycyjnym (np. 2583) i obliczmy sumę kwadratów cyfr
tej liczby (22 + 52 + 82 + 32 = 102). Z otrzymaną liczbą zróbmy to samo
(12 + 02 + 22 = 5) i postępujmy w ten sam sposób dalej (52 = 25, 22 + 52 = 29,
22 + 92 = 85, . . . ).
Dowieść, że jeżeli ten proces nie doprowadzi nas do jedynki (po czym
oczywiście jedynka będzie powtarzać się bezustannie), to doprowadzi na pewno
do liczby 145, po czym wystąpi cykl
145, 42, 20, 4, 16, 37, 58, 89,
który będzie powtarzać się.
Naturalne uogólnienie tego zadania otrzymamy, gdy będziemy rozważać
kolejne sumy k-tych potęg cyfr w dowolnym układzie pozycyjnym. To jest
właśnie problem Steinhausa. Nie ma on większego znaczenia matematycznego (por. uwagi na ten temat w [2]), ale otwiera drogę do ciekawych uogólnień
(por. artykuł [3]) i jest dobrym polem doświadczalnym do nauki programowania, czego przykładem jest artykuł [4].
Ciągi kolejnych sum
Jak obliczyć sumę kwadratów cyfr liczby naturalnej w MuPADzie? Procedura ’g adic(n, g)’ z biblioteki ’numlib’ zwraca cyfry zapisu liczby n w
systemie pozycyjnym o podstawie g. Możemy ją wykorzystać do napisania
procedury ’suma(n, k)’ obliczającej sumę k-tych potęg cyfr liczby naturalnej n
(plik ’ciag.mnb’). Procedurę ’suma’ wykorzystamy w procedurze ’ciag(n, k)’
zwracającej ciąg kolejnych sum (k-tych potęg cyfr) zaczynający się od liczby
n, aż do pierwszego powtórzenia. Przyjmujemy podstawę sytemu pozycyjnego g := 10 i już możemy wyznaczać ciągi, na przykład:
Problem Steinhausa
„MathPAD 2005”
2
• ciag(2583, 2)
2583, 102, 5, 25, 29, 85, 89, 145, 42, 20, 4, 16, 37, 58, 89
• ciag(12345678, 4)
12345678, 8772, 8914, 10914, 6819, 11954, 7444, 3169, 7939, 15604,
2178, 6514, 2178
• ciag(1234567, 9)
1234567, 52666768, 216835756, 198653173, 574062013, 52666768
Liczby wyznaczające poszczególne pętle
Załóżmy, że chcemy zbadać pętle wyznaczone przez wszystkie liczby naturalne od n1 do n2. Moglibyśmy wyznaczać pętle dla kolejnych liczb, ale to
byłoby zbyt czasochłonne. Lepiej wprowadzić zbiór liczb, które już zostały
sprawdzone i przy sprawdzaniu kolejnej liczby iterować procedurę ’suma’ jedynie do uzyskania liczby, którą już znamy. Przy okazji trzeba uzupełniać listę
pętli oraz odpowiadających im zbiorów liczb. Tak właśnie jest skonstruowana
procedura ’liczby(n1, n2, k)’, która zwraca liczbę pętli wyznaczonych przez
liczby od n1 do n2, listę tych pętli oraz listę zbiorów liczb wyznaczających
poszczególne pętle (plik ’liczby.mnb’).
Zbadajmy, jak wyglądają pętle sum trzecich potęg cyfr wyznaczone przez
liczby od 20 do 50.
• liczby(20, 50, 3)








7,

















1
2
3
4
5
6
7
=
=
=
=
=
=
=
[371]
[153]
[217, 352, 160]
[133, 55, 250]
[370]
[407]
[1459, 919]
 






,

















1
2
3
4
5
6
7
=
=
=
=
=
=
=
{20, 23, 26, 29, 32, 35, 38, 41, 44, 50}
{21, 24, 27, 30, 33, 36, 39, 42, 45, 48}
{22}
{25, 28, 31, 40, 46}
{34, 37, 43}
{47}
{49}













Otrzymujemy 7 pętli, z czego aż cztery jednoelementowe, utworzone przez
liczby równe sumom sześcianów swoich cyfr.
Przy okazji widzimy strukturę danych wyjściowych naszej procedury. Jeśli
przyjmiemy ’wynik := liczby(20, 50, 3)’, to ’wynik[1]’ będzie liczbą pętli, zaś
’wynik[2]’ to będzie lista otrzymanych pętli, czyli na przykład ’wynik[2][4]’
Problem Steinhausa
„MathPAD 2005”
3
to czwarta pętla. Podobnie ’wynik[3]’ to lista zbiorów liczb z rozważanego
przedziału wyznaczających kolejne pętle, czyli ’wynik[3][4]’ to zbiór liczb
wyznaczających czwartą pętlę.
• wynik := liczby(20, 50, 3) :
wynik[1];
wynik[2][4];
wynik[3][4]
7
[133, 55, 250]
{25, 28, 31, 40, 46}
Jak to narysować?
Jeśli chcemy zobaczyć, które liczby wyznaczają daną pętlę, to wystarczy
je zaznaczyć jako punkty w układzie współrzędnych. Liczby od 1 do 399
przedstawimy jako punkty w kwadracie 20 × 20 w ten sposób, że punkt
(x, y) przedstawia liczbę x + 20y. Wówczas liczbie n odpowiada punkt o
współrzędnych (n mod 20, n div 20), gdzie ’mod’ to reszta z dzielenia, a
’div’ to część całkowita ilorazu.
Instrukcją służącą do zdefiniowania obiektu graficznego, który chcemy
narysować, jest w MuPADzie ’plot::PointList2d’ – dwuwymiarowa lista
punktów. Dobieramy odpowiednie wartości niektórych parametrów i otrzymujemy rysunki.
Liczby od 1 do 399 wyznaczające pętle dla k = 2
[4, 16, 37, 58, 89, 145, 42, 20]
[1]
15
n div 20
n div 20
15
10
10
5
5
5
10
n mod 20
15
5
10
n mod 20
15
Problem Steinhausa
„MathPAD 2005”
4
Liczby od 1 do 399 wyznaczające pętle dla k = 3
[1]
[371]
10
5
15
n div 20
15
n div 20
n div 20
15
10
5
5
10
n mod 20
15
5
10
n mod 20
15
5
10
n mod 20
n div 20
10
15
10
n mod 20
[407]
15
5
15
10
5
5
10
n mod 20
15
15
[136, 244]
n div 20
n div 20
5
10
n mod 20
[1459, 919]
15
10
10
5
5
15
15
15
5
5
10
n mod 20
[217, 352, 160]
15
n div 20
n div 20
5
[370]
15
10
10
5
[133, 55, 250]
n div 20
[153]
10
5
5
10
n mod 20
15
5
10
n mod 20
15
Problem Steinhausa
„MathPAD 2005”
5
Liczby od 1 do 399 wyznaczające pętle dla k = 4
[13139, 6725, 4338, 4514, 1138, 4179, 9219]
[1]
15
n div 20
n div 20
15
10
10
5
5
5
10
n mod 20
5
15
10
n mod 20
[8208]
[6514, 2178]
15
n div 20
15
n div 20
15
10
5
10
5
5
10
n mod 20
15
5
10
n mod 20
15
Uwaga. To nie są wszystkie pętle dla k = 4. Liczba 1634 jest równa sumie
czwartych potęg swoich cyfr, czyli tworzy pętlę jednoelementową. Widzimy,
że żadna liczba mniejsza od 400 nie wyznacza tej pętli.
Problem Steinhausa
„MathPAD 2005”
6
Kolory liczb od 0 do 9999
k=2
80
80
60
60
n div 100
n div 100
k=1
40
20
40
20
20
40
60
n mod 100
80
20
60
80
60
80
k=4
80
80
60
60
n div 100
n div 100
k=3
40
n mod 100
40
20
40
20
20
40
60
n mod 100
80
20
40
n mod 100
Problem Steinhausa
„MathPAD 2005”
7
Jeszcze dwa rysunki
Liczby podzielne przez 3 wyznaczają pętlę [153].
k=3, [153]
24
n div 30
18
12
6
6
12
18
n mod 30
24
Która liczba podzielna przez 3 nie została zaznaczona na tym rysunku?
Zauważmy, że dla k = 4 mamy mało liczb wyznaczających pętlę [1].
k=4, [1]
n div 40
30
20
10
10
20
n mod 40
30
Czy należy podejrzewać, że jedynymi takimi liczbami są 1, 10, 100, 1000, . . .?
Odpowiedź na to pytanie, wbrew pozorom, jest łatwa.
Problem Steinhausa
„MathPAD 2005”
8
Jak wyznaczyć wszystkie pętle?
Iterując sumy k-tych potęg cyfr rozważanych liczb zawsze trafialiśmy na
pętlę. Nasuwa się pytanie: Czy zawsze tak musi być? I drugie pytanie: Czy
dla danego k liczba pętli musi być skończona?
Rozważmy na przykład k = 2. Suma kwadratów cyfr liczby czterocyfrowej w układzie dziesiątkowym nie przekracza 4 · 92 = 324, więc jest liczbą co
najwyżej trzycyfrową. Zatem suma kwadratów cyfr liczby czterocyfrowej jest
mniejsza od tej liczby. „Tym bardziej” suma kwadratów cyfr liczby pięciocyfrowej będzie od niej mniejsza i tak dalej. Przyjrzyjmy się temu dokładniej.
Twierdzenie. Dane są liczby rzeczywiste g > 2 i C > 0. Wykaż, że jeśli
nierówność
n < C · gn
zachodzi dla pewnej liczby naturalnej n > 1, to zachodzi również dla wszystkich następnych liczb naturalnych.
Dowód. Dla każdego n > 1, jeśli n < C · g n , to
n + 1 6 2n < 2Cg n 6 g n+1 . ¤
Wniosek. Dla danych liczb naturalnych g > 2 i k > 1 istnieje liczba naturalna n0 6 2k + 1 o tej własności, że nierówność
n · (g − 1)k < g n−1
zachodzi dokładnie wtedy, gdy n > n0 .
1
Dowód. Przyjmujemy C =
i sprawdzamy, że dana nierówność
g · (g − 1)k
zachodzi dla n = 2k + 2:
n · (g − 1)k = 2(k + 1)(g − 1)k 6 2 · 2k · (g − 1)k < g n−1 .
Skorzystaliśmy z nierówności k + 1 6 2k , która zachodzi dla każdego k,
gdyż zachodzi dla k = 1 (powyższe twierdzenie jest prawdziwe również dla
nierówności postaci n 6 C · g n , np. n 6 12 · 2n ). ¤
Powyższy wniosek oznacza dla n > n0 , że w układzie pozycyjnym o podstawie g największa możliwa suma k-tych potęg cyfr liczby n-cyfrowej jest
mniejsza od najmniejszej liczby n-cyfrowej. Zatem dla dowolnej liczby ncyfrowej, gdzie n > n0 , suma k-tych potęg cyfr jest mniejsza od tej liczby.
Problem Steinhausa
„MathPAD 2005”
9
Oznacza to, że iterując sumę k-tych potęg cyfr, począwszy od dowolnie wybranej liczby naturalnej, zawsze dojdziemy do liczby co najwyżej n0 cyfrowej. Z tego wynika, że zawsze otrzymamy pętlę i liczba wszystkich pętli
jest skończona.
Zatem, jeśli chcemy znaleźć wszystkie pętle, to wystarczy sprawdzić (pętle wyznaczone przez) liczby co najwyżej n0 -cyfrowe. Wróćmy do przykładu
k = 2, g = 10. Łatwo sprawdzić, że w tym przypadku n0 = 3, więc wystarczy
zbadać liczby co najwyżej trzycyfrowe. Zauważmy, że suma kwadratów cyfr
liczby co najwyżej trzycyfrowej nie przekracza 243, a suma kwadratów cyfr
liczby mniejszej lub równej 243 nie przekracza 163. Suma kwadratów cyfr
liczby mniejszej lub równej 163 nie przekracza 162, więc wystarczy zbadać
pętle wyznaczone przez liczby od 1 do 162.
Opierając się na powyższych obserwacjach możemy skonstruować procedurę ’ostatni(k)’ (plik ’petle.mnb’) zwracającą liczbę, do której musimy
wyznaczać pętle sum k-tych potęg cyfr. Zwróćmy jeszcze uwagę na to, że
suma k-tych potęg cyfr nie zależy od ich kolejności, więc wystarczy szukać
pętli wyznaczonych przez liczby o niemalejącym ciągu cyfr.
Procedura ’wszpetle(k)’ zwraca wszystkie pętle sum k-tych potęg cyfr,
proszę popróbować!
Literatura
[1] Hugo Steinhaus, Sto zadań, PWN Warszawa 1958, DIP Warszawa 1993.
[2] Michał Szurek, Opowieści matematyczne, WSiP Warszawa 1987.
[3] Józef Kwiatkowski, Andrzej Nowicki, Uogólnienia zadania Steinhausa o
liczbie 145, Delta 4/1998.
[4] Bogdan Podlecki, Cyfromania, czyli okazja do stawiania i weryfikowania
hipotez matematycznych,
http://www.wsip.com.pl/serwisy/czasmat/mata03/cyfroman.htm.