Strona główna » Algorytmy » Artykuły » Liczby Podzielne Wspak
 

Liczby Podzielne Wspak

Definicja

Liczby Podzielne Wspak to takie liczby, które są podzielne przez same siebie zapisane wspak. Taka liczba nie może być liczbą palindromiczną po usunięciu z niej zer z prawej strony.

Przykład

Najmniejszą liczbą Podzielną Wspak jest 510, ponieważ 510 / 15 = 34, a ponadto 51 ≠ 15. Kolejna liczba to 540. W tym przypadku 540 / 45 = 12, a nie jest to też palindrom, bo 54 ≠ 45. Liczba 110 nie spełnia warunku palindromu, ponieważ z liczby należy wpierw usunąć zera (110 na 11) i dopiero sprawdzić czy jest palindromiczna.

Ciąg liczb

Liczby Podzielne Wspak można ustawić w nastepujący ciąg: 510, 540, 810, 2100, 4200, 5100, 5200, 5400, 5610, 5700, ..

Implementacja

Funkcje pomocnicze

Wspak

W celu zapisania liczby wspak należy kolejno zdejmować cyfry z końca i przepisywać do nowej zmiennej.

C++C#
Python
  1. def Wspak(a):
  2. b = 0
  3. while a > 0:
  4. b = b * 10 + a % 10
  5. a //= 10
  6. return b

Usuń zera

Dopóki na końcu jest zero to należy usunąć tę cyfrę. Dodatkowo należy sprawdzić czy liczba nie jest zerem, ponieważ wtedy można wpaść w nieskończoną pętlę.

C++C#
Python
  1. def UsunZera(a):
  2. while a > 0 and a % 10 == 0:
  3. a //= 10
  4. return a

Czy Podzielna Wspak?

Korzystając z funkcji pomocniczych należy zapisać definicję. Prawda powinna zostać zwrócona tylko wtedy, gdy spełniony jest warunek podzielności oraz palindromu.

C++C#
Python
  1. def CzyPodzielna(a):
  2. awspak = Wspak(a)
  3. return a % awspak == 0 and UsunZera(a) != awspak

Testowanie funkcji

Poniższy fragment programu wczytuje od użytkownika zakre poszukiwań n, a następnie wypisuje wszystkie liczby Podzielne Wspak z zakresu [1, n].

C++C#
Python
  1. n = int(input("Podaj zakres:\n n = "))
  2. for i in range(1, n):
  3. if CzyPodzielna(i):
  4. print(i, end = " ")