Wokół Problemu Steinhausa z teorii liczb Konferencja MathPAD 0 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. 283) i obliczmy sumę kwadratów cyfr tej liczby (2 2 + 2 + 8 2 + 3 2 = 2). Z otrzymaną liczbą zróbmy to samo (1 2 +0 2 +2 2 = ) i postępujmy w ten sam sposób dalej ( 2 = 2, 2 2 + 2 = 29, 2 2 + 9 2 = 8,... ). 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 14, po czym wystąpi cykl który będzie powtarzać się. 14, 42,, 4, 16, 37, 8, 89, 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 := i już możemy wyznaczać ciągi, na przykład:
Problem Steinhausa MathPAD 0 2 ciag(283, 2) 283, 2,, 2, 29, 8, 89, 14, 42,, 4, 16, 37, 8, 89 ciag(1234678, 4) 1234678, 8772, 8914, 914, 6819, 1194, 7444, 3169, 7939, 1604, 2178, 614, 2178 ciag(123467, 9) 123467, 2666768, 2168376, 19863173, 740613, 2666768 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 do 0. 7, liczby(, 0, 3) 1 = [371] 2 = [13] 3 = [217, 32, 160] 4 = [133,, ] = [370] 6 = [407] 7 = [149, 919], 1 = {, 23, 26, 29, 32, 3, 38, 41, 44, 0} 2 = {21, 24, 27, 30, 33, 36, 39, 42, 4, 48} 3 = {22} 4 = {2, 28, 31, 40, 46} = {34, 37, 43} 6 = {47} 7 = {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(, 0, 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 0 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(, 0, 3) : wynik[1]; wynik[2][4]; wynik[3][4] 7 [133,, ] {2, 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 w ten sposób, że punkt (x, y) przedstawia liczbę x + y. Wówczas liczbie n odpowiada punkt o współrzędnych (, ), 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 [1] [4, 16, 37, 8, 89, 14, 42, ] 1 1 1 1
Problem Steinhausa MathPAD 0 4 Liczby od 1 do 399 wyznaczające pętle dla k = 3 [1] [371] [13] 1 1 1 1 1 1 [133,, ] [370] [217, 32, 160] 1 1 1 1 1 1 [407] [149, 919] [136, 244] 1 1 1 1 1 1
Problem Steinhausa MathPAD 0 Liczby od 1 do 399 wyznaczające pętle dla k = 4 [1] [13139, 672, 4338, 414, 1138, 4179, 9219] 1 1 1 1 [88] [614, 2178] 1 1 1 1 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 0 6 Kolory liczb od 0 do 9999 k=1 k=2 80 80 n div 0 60 40 n div 0 60 40 40 60 80 n mod 0 40 60 80 n mod 0 k=3 k=4 80 80 n div 0 60 40 n div 0 60 40 40 60 80 n mod 0 40 60 80 n mod 0
Problem Steinhausa MathPAD 0 7 Jeszcze dwa rysunki Liczby podzielne przez 3 wyznaczają pętlę [13]. k=3, [13] 24 n div 30 18 12 6 6 12 18 24 n mod 30 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] 30 n div 40 30 n mod 40 Czy należy podejrzewać, że jedynymi takimi liczbami są 1,, 0, 00,...? Odpowiedź na to pytanie, wbrew pozorom, jest łatwa.
Problem Steinhausa MathPAD 0 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 9 2 = 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 g n 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 2n < 2Cg n g n+1. Wniosek. Dla danych liczb naturalnych g 2 i k 1 istnieje liczba naturalna n 0 2k + 1 o tej własności, że nierówność n (g 1) k < g n 1 zachodzi dokładnie wtedy, gdy n > n 0. 1 Dowód. Przyjmujemy C = g (g 1) k zachodzi dla n = 2k + 2: i sprawdzamy, że dana nierówność n (g 1) k = 2(k + 1)(g 1) k 2 2 k (g 1) k < g n 1. Skorzystaliśmy z nierówności k + 1 2 k, 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 C g n, np. n 1 2 2n ). Powyższy wniosek oznacza dla n > n 0, ż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 n- cyfrowej, gdzie n > n 0, suma k-tych potęg cyfr jest mniejsza od tej liczby.
Problem Steinhausa MathPAD 0 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 n 0 - 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 n 0 -cyfrowe. Wróćmy do przykładu k = 2, g =. Łatwo sprawdzić, że w tym przypadku n 0 = 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 198, DIP Warszawa 1993. [2] Michał Szurek, Opowieści matematyczne, WSiP Warszawa 1987. [3] Józef Kwiatkowski, Andrzej Nowicki, Uogólnienia zadania Steinhausa o liczbie 14, 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.