I_P_W14_M03_Java Czy liczba jest liczbą pierwszą?
Liczby bliźniacze
Inną interesującą grupą są liczby bliźniacze. Są to pary liczb pierwszych, których różnica jest równa 2. Przykładami takich par będą:
3 i 5,
5 i 7,
11 i 13,
17 i 19,
857 i 859.
Napiszmy algorytm w postaci pseudokodu, który sprawdzi, czy dane dwie liczby liczba1 oraz liczba2 są liczbami bliźniaczymi.
Specyfikacja:
Dane:
liczba1– liczba do sprawdzenia; liczba naturalnaliczba2– liczba do sprawdzenia; liczba naturalna
Wynik:
Program wypisuje komunikat Liczby są parą liczb bliźniaczych lub Liczby nie są parą liczb bliźniaczych.
Oto zapisany za pomocą pseudokodu algorytm sprawdzający, czy dwie zadane liczby są liczbami bliźniaczymi:
Funkcja czyPierwsza() sprawdza, czy dana liczba jest liczbą pierwszą. Jeśli tak, zwraca wartość prawda. Wykorzystuje ona algorytm przedstawiony w sekcji powyżej.
Funkcja wartośćBezwzględna() zwraca wartość bezwzględną z danej liczby.
Na początku sprawdzamy, czy różnica między liczbami wynosi 2. Jeżeli tak, to sprawdzamy, czy liczby są liczbami pierwszymi. W takim wypadku wiemy, że podane liczby są liczbami bliźniaczymi.
Przygotujmy kod, który – wśród liczb pierwszych – pozwoli odnaleźć liczby bliźniacze. W tym przypadku przygotujemy funkcję obliczającą liczby pierwsze w przedziale metodą Eratostenesa. Następnie zbadamy, które spośród znalezionych liczb pierwszych spełniają warunki liczb bliźniaczych. Działanie naszego programu sprawdzimy, szukając liczb bliźniaczych do liczby 80.
Specyfikacja:
Dane:
n– górna granica przedziału; liczba naturalna, większa od 2
Wynik:
Program ma znaleźć i wypisać pary liczb bliźniaczych w zadanym przedziale.
Zaczynamy od zaimplementowania funkcji wyszukującej wszystkie liczby pierwsze w przedziale . Tworzymy definicję naszej funkcji. Następnie przygotowujemy dwie listy: lista_liczb, która będzie przechowywała znalezione liczby pierwsze, oraz lista, która będzie służyła do przechowywania wykreślonych liczb (wartość True oznacza, że liczba nie została jeszcze wykreślona).
Następnie tworzymy pętlę, której zadaniem będzie znajdowanie najmniejszej niewykreślonej liczby w danym momencie. Będzie ona działała w przedziale . W celu obliczenia pierwiastka, importujemy z biblioteki math funkcję sqrt. Jeżeli obecnie sprawdzana liczba nie była jeszcze wykreślona, to zaczynamy wykreślanie wszystkich jej wielokrotności z tablicy lista. W tym celu tworzymy pętlę odpowiadającą za wyznaczanie kolejnych wielokrotności liczby indeks. Swoje działanie będzie zaczynała od jej dwukrotności i zwiększała wartość o wartość sprawdzanej liczby.
Tworzymy listę liczby_blizniacze, która będzie przechowywała znalezione pary liczb bliźniaczych. Następnie, za pomocą pętli, sprawdzamy każde dwie kolejne znalezione liczby pierwsze z tablicy liczby_pierwsze.
Oto kod całego programu:
Wynik wywołania kodu będzie następujący:
Napisz program wyszukujący liczby bliźniacze z podanego zakresu. Program powinien wypisywać tylko te pary liczb bliźniaczych, w których jedna lub obie liczby kończą się cyfrą 3. Każdą parę liczb wypisuj w nowej linii, oddzielając liczby w parze znakiem spacji. Przetestuj swój program dla przedziału .
Specyfikacja:
Dane:
a- początek sprawdzanego przedziału; liczba naturalnab- koniec sprawdzanego przedziału; liczba naturalna
Wynik:
Program wypisze w kolejnych liniach pary liczb bliźniaczych, z przedziału , takich, że chociaż jedna z nich kończy się cyfrą 3. Pary powinny być oddzielone znakiem spacji.
Twoje zadanie: Program ma wyszukiwać pary liczb bliźniaczych w przedziale (2,100). Wypisywane powinny być te pary, w których jedna lub dwie z liczb kończą się cyfrą 3.
Słownik
liczba, która dzieli bez reszty daną liczbę całkowitą
dzielniki danej liczby mniejsze od niej samej