Liczby Zgubne to takie liczby, których populacja jest liczbą pierwszą. Za populację przyjmuje się liczbę cyfr 1 potrzebnych do zapisu liczby w systemie binarnym.
Liczbą zgubną jest np. 17 ponieważ 17 = 100012. Jak widać w zapisie binarnym występują dokładnie dwie cyfry 1, a 2 jest liczbą parzystą. Innym przykładem jest liczba 79 = 10011112. Tym razem w jej zapisie występuje pięć bitów 1, a 5 jest liczbą pierwszą, więc też jest to liczba Zgubna.
Ustawiając liczby Zgubne w ciąg otrzymuje się: 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 17, 18, 19, 20, 21, 22, 24, 25, 26, 28, ..
Należy pamiętać, że liczba 0, ani 1 nie są liczbami pierwszymi, więc żadna liczba postaci np. 2n nigdy nie będzie liczbą Zgubną. Jednak po dodaniu jakiejkolwiek potęgi 2k w wyniku otrzyma się liczbę ze wspomnianego zbioru. Oznacza to, że liczba pierwsza 2 nie jest liczbą zgubną, ale 3 już tak.
Napisz program, który wypisze pierwsze n liczb Zgubnych, gdzie n jest dodatnią liczbą całkowitą wprowadzona od użytkownika. Przetestuj działanie napisanego programu.
Najważniejszą częścią takiego programu jest funkcja czyZgubna(), która dla podanej liczby n zwróci czy liczba bitów tej liczby jest pierwsza.
(2.) Wyzeruj licznik, a następnie (3.) dopóki liczba jest większa od 0 to (4.) sprawdź czy najmniej znaczący bit jest 1. Jeśli tak to (5.) zwiększ licznik. Na koniec iteracji należy pamiętać, aby (6.) usunąć sprawdzony już bit. Po zakończeniu iteracji (8.) trzeba sprawdzić czy w liczniku znajduje się liczba pierwsza.
Funkcją pomocniczą jest tutaj funkcja czyPierwsza(), która zwraca wartość logiczną czy dana liczba jest liczbą pierwszą.
Więcej na temat poszukiwań liczb Pierwszych można przeczytać w tym artykule.
W celu sprawdzenia poprawności działania funkcji poniższy fragment kodu wczytuje od użytkownika ile pierwszych liczb Zgubnych ma wypisać, a następnie rozpoczyna ich poszukiwania.
Napisz funkcję szukajZgubnych(), który przyjmie dwa argumenty n i k. Następnie wypisz pierwsze n liczb zgubnych o k bitach.
Przykładowo dla n = 5 i k = 5 program powinien wypisać:
Liczby mają następujące rozwinięcia binarne, które każde ma dokładnie 5 bitów:
Zapis dziesiętny | Zapis binarny |
---|---|
31 | 11111 |
47 | 101111 |
55 | 110111 |
59 | 111011 |
61 | 111101 |