Liczba automorficzna to taka liczba naturalna, która podniesiona do kwadratu zawiera w końcówce samą siebie. Najprostszym przykładem jest liczba 1, ponieważ 12. Zdecydowanie lepszym przykładem jest liczba 5: 52 = 25. W liczbie 25 na końcu występuje 5. Bardziej skomplikowanym przykładem jest liczba 376: 3762 = 141376. Jak widać liczba 141376 zawiera na końcu 376.
Liczby automorficzne, pomijając 0 oraz 1 mają na końcu liczbę 5 i 6. Jako dowód możemy zastanowić się, które cyfry podniesione do kwadratu zawierają siebie w jedności. Otóż spełniają to tylko 0, 1, 5 oraz 6. Jednak z tej grupy tylko 5 i 6 są prawidłowe dla nieskończonej liczby przypadków.
Ciąg liczb automorficznych wygląda następująco: 0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625, 109376, 890625, ..
Czy dana liczba a jest automorficzna możemy sprawdzić na kilka sposobów.
Najprostszą metodą sprawdzenia czy liczba jest automorficzna jest skorzystanie ze wzoru a = a2 mod mk, gdzie a - dana liczba, m - podstawa liczby a oraz k - długość liczby a. Jest to (nieczysto) matematyczny zapis warunku podanego w definicji.
(1.) Funkcja czyAutomorficzna() przyjmuje argument a - liczba do sprawdzenia i zwraca wartość logiczną, która określa czy liczba jest automorficzna. (2.) Przyjmujemy, że podstawą liczby a jest 10. (3.) Tworzymy kopię liczby a. (4. - 7.) Wyliczamy 10k. (8.) Jako wynik zwracamy wartość warunku podanego w definicji.
Tym razem pominiemy wyliczanie długości danej liczby a. Tym razem podniesiemy ja do kwadratu i porównamy ostatnie cyfry a2 oraz a.
(2.) Wyliczamy kwadrat liczby a. (3.) Dopóki nie sprawdzimy wszystkich cyfr a: (4.) sprawdzamy czy ostatnie cyfry są różne - jeśli tak to (5.) zwracamy, że liczba nie jest automorficzna. (6., 7.) Usuwamy ostatnią cyfrę z a i a2. Jeśli nie zwrócimy, ani razu fałszu, a wyjdziemy z pętli while oznacza to, że (9.) zwracamy prawdę.
Zdecydowaną zaletą drugiego rodzaju funkcji jest brak potrzeby wyliczania długości liczby. Jednak z punktu widzenia złożoności oba algorytmy działają w czasie Θ(k), ale pierwsza implementacja wykonuje mniej operacji arytmetycznych.
Funkcję można przetestować przy pomocy poniższej funkcji main():
Napisz funkcję, która na początku określi czy liczba ma szansę być liczbą automorficzną. Wskazówka: cechy ostatnich cyfr liczby automorficznej