Strona główna » Algorytmy » Artykuły » Liczby Odkryte
 

Liczby Odkryte

Definicja

Liczba Odkryta n to taka liczba naturalna, która jest podzielna przez każdą cyfrę z której się składa. Podczas poszukiwania takich liczb należy pominąć wszystkie cyfry, które zawierają 0.

Przykład

Liczbą Odkrytą jest 24, ponieważ 24 dzieli się przez 2 oraz 4. Oczywistym przypadkiem są liczby o k cyfrach, gdy każda z cyfr jest taka sama. Tego typu liczba jest zawsze Odkryta. Przypuścmy, że mamy liczbę n = cccc..c o k cyfrach c wtedy wystarczy sprawdzić tylko czy liczba dzieli się przez c, a jest to prawdą, ponieważ n/c = 1111..1.

Z kolei przykładem liczby nieodkrytej jest 26, która dzieli się przez 2, ale nie przez 6. Liczbami Odkrytymi z pewnością nie są liczby nieparzyste, które mają w sobie parzystą cyfrę. Przykładem takich liczb jest np. 21, 23, 25 itd. Należy jednak pamiętać, że możliwe jest, aby liczba Odkryta składała się z cyfr parzystych i nieparzystych.

Ciąg

Liczby Odkryte można ustawić w następujący ciąg: 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22, 24, 33, ..

Implementacja

Zadanie polega na napisaniu funkcji czyOdkryta(), która dla podanej liczby całkowitej a program zwróci wartość logiczną czy dana liczba należy do zbioru liczb Odkrytych. Program powinien zostać przetestowany.

Strategia

W celu sprawdzenia czy liczba jest Odkryta potrzebna jest pętla, która pozwoli pobrać kolejne jej cyfry. Jeden ze sposobów polega na skopiowaniu wartości liczby do oddzielnej zmiennej, a następnie pobierać z niej kolejną cyfrę operacją modulo i usuwać ostatnią cyfrę poprzez dzielenie całkowitoliczbowe. W przypadku natrafienia cyfry, która nie dzieli można od razu zwrócić błąd.

Rozwiązanie

Poniżej została przedstawiona przykładowa implementacja funkcji czyOdkryta().

C++
C#
  1. bool czyOdkryta(int a) {
  2.   int kopia = a;
  3.   while (kopia > 0) {
  4.     int c = kopia % 10;
  5.     kopia /= 10;
  6.     if (c == 0 || a % c != 0)
  7.       return false;
  8.   }
  9.   return true;
  10. }

Testowanie funkcji

W celu przetestowania napisanej funkcji może skorzystać z poniższego kodu programu.

C++
C#
  1. int main() {
  2.   int n;
  3.   cout << "Podaj liczbe do sprawdzenia:\n n = ";
  4.   cin >> n;
  5.   bool w = czyOdkryta(n);
  6.   cout << n << (w ? " " : " nie ") << "jest Odkryta";
  7.   system("pause");
  8.   return 0;
  9. }

Zadania

Zadanie 1

Napisz funkcję czyOdkryta(), która pozwoli sprawdzić czy liczba jest odkryta w pewnym systemie b. Zakładamy, że wartość b będzie miała wartość z zbioru {2, 3, .., 16}. Przetestuj działanie napisanego programu.

Przykładowo liczba 99 przeliczona na różne systemy to:

System2345678910111213141516
Wartość11111111100110333320101103513377313255212193168143120FF
Czy Odkryta?TakNieTakNieNieTakNieTakNieNieNieNieNieNieTak