Liczby Uparte to takie liczby nieparzyste, których nie można wyrazić przy pomocy pewnej potęgi liczby 2 oraz liczby pierwszej. Oznacza to, że liczba Uparta jest postaci 2i + p, gdzie i ≥ 0.
Najmniejszą liczbą upartą jest 1, ponieważ 20 = 1, a wtedy p = 0, ale 0 nie jest liczbą pierwszą. Drugą liczbą upartą jest 127. Można to udowodnić sprawdzając wszystkie potencjalne rozkłady:
i | 2i | p | Komentarz | 0 | 1 | 126 | p nie jest pierwsze, dzielnik 2 | 1 | 2 | 125 | p nie jest pierwsze, dzielnik 5 | 2 | 4 | 123 | p nie jest pierwsze, dzielnik 3 | 3 | 8 | 119 | p nie jest pierwsze, dzilenik 7 | 4 | 16 | 111 | p nie jest pierwsze, dzilenik 3 | 5 | 32 | 95 | p nie jest pierwsze, dzielnik 5 | 6 | 64 | 63 | p nie jest pierwsze, dzielnik 3 |
---|
Jak wynika z tabelki niezależnie od wybranej pary warunek rozkładu nigdy nie został spełniony.
Ustawiając liczby w ciąg otrzymujemy: 1, 127, 149, 251, 331, 337, 373, 509, 599, 701, ...
W celu zaimplementowania funkcji do sprawdzania czy dana liczba jest Uparta należy dodać funkcję do sprawdzania czy liczba jest pierwsza. W ten sposób możliwe jest sprawdzenie czy rozpatrywany rozkład jest prawidłowy. Więcej informacji o sprawdzaniu czy liczba jest pierwsza można znaleźć tutaj.
Teraz można przejść do pisania funkcji czyUparta(), która dla danego argumentu a zwróci wartość logiczną czy tak jest. Oto przykładowy kod funkcji:
Sprawdzanie polega na wyliczaniu kolejnych potęg liczby dwa i sprawdzaniu czy różnica pomiędzy daną potęgą oraz sprawdzaną liczba jest liczbą pierwszą. Jeśli tak jest to należy zwrócić fałsz. Jeśli jednak pętla nie zostanie przerwana to liczba na pewno jest Upartai należy zwrócić prawdę.
Poniższy kod pozwala na wczytanie liczby od użytkownika, a następnie wypisanie czy przekazana liczba jest liczba Upartą.