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.