Liczby gnomiczne to liczby postaci 2n + 1, które dodane do kwadratu liczby n dają kwadrat następnej liczby, gdzie n należy do zbioru liczb naturalnych.
Kilka pierwszych liczb gnomicznych razem z uzasadnieniem:
Lp. | 2n + 1 | n2 | (n+1)2 |
---|---|---|---|
1 | 3 | 1 | 4 |
2 | 5 | 4 | 9 |
3 | 7 | 9 | 16 |
4 | 9 | 16 | 25 |
5 | 11 | 25 | 36 |
Napiszemy teraz funkcję, która jako argument dostanie liczbę n i zwróci dla niej liczbę gnomiczną:
Warto od razu też napisać drugą funkcję, która zwróci, którą z kolei jest liczba gnomiczna podana w argumencie:
Nasza funkcja whichGnomicNumber() ma wadę, która wynika z zaokrąglania liczb typu int. Przyjmijmy, że jako argument damy n = 4. Wtedy z wyniku dzielenie 3 przez 2 otrzymamy 1.5, ale zaokrąglenie wskaże, że zwrócimy 1, a przecież 4 nie jest liczbą gnomiczną.
Rozwiązaniem tego problemu jest sprawdzanie czy dana liczba jest liczbą gnomiczną:
(2.) Wyliczamy wynik zamiany liczby gnomicznej na jej pozycję. (3.) Jeżeli wyliczona liczba t nie ma części ułamkowej to oznacza, że dana liczba nie jest gnomiczna.
Teraz możemy poprawić funkcję whichGnomicNumber(), która teraz zwróci -1 jeśli okaże się, że podana liczba nie jest gnomiczna czyli innymi słowy nie jesteśmy w stanie zwrócić jej pozycji na liście liczb gnomicznych:
Zauważmy, że (n+1)2 = n2 + 2n + 1 czyli 2n + 1 = (n + 1)2 - n2. Z tego wynika, że dodając do n-tej liczby naturalnej dodamy n-tą liczbę gnomiczną to otrzymamy kwadrat kolejnej liczby naturalnej:
Lp. | n2 | L. Gnomiczna |
---|---|---|
1 | 1 | 3 |
2 | 4 | 5 |
3 | 9 | 7 |
4 | 16 | 9 |
5 | 25 | 11 |
Chcąc sprawdzić, które liczby są gnomiczne w danym zakresie możemy wykorzystać poniższy kod:
Napisz program, który wczyta dwie liczby całkowite, które będą zakresem. Dla każdej liczby gnomicznej z zakresu podaj jej liczbę gnomiczną.