Matura 2017 (maj). Zadanie 2. Liczby pierwsze
Parą liczb bliźniaczych nazwiemy dwie liczby pierwsze różniące się o 2. Liczbami bliźniaczymi są 11 i 13, gdyż obie liczby są pierwsze i różnica pomiędzy nimi wynosi 2. Para 13 i 15 nie jest parą liczb bliźniaczych, gdyż 15 jest liczbą złożoną.
Zadanie 1.
Uzupełnij poniższą tabelę. Wykonaj obliczenia i podaj odpowiedź, czy istnieje taka liczba, z którą liczba a tworzy parę liczb bliźniaczych.
Liczba a | Czy liczba a jest pierwsza? | Liczba b1=a+2 | Czy liczba b1 jest pierwsza? | Liczba b2=a–2 | Czy liczba b2 jest pierwsza? | Czy istnieje taka liczba b, z którą liczba a tworzy parę liczb bliźniaczych? |
17 | tak | 19 | tak | 15 | nie | TAK |
5 | tak | 7 | tak | 3 | tak | TAK |
31 | tak | 33 | nie | 29 | tak | TAK |
41 | tak | 43 | tak | 39 | nie | TAK |
49 | nie | 51 | nie | 47 | tak | NIE |
Rozwiązanie:
Liczba pierwsza jest to taka liczba naturalna większa od 1, która posiada dokładnie dwa dzielniki: 1 i samą siebie. Sprawdzamy każdą liczby a czy jest to liczba pierwsza, jeśli nie to nawet nie musimy sprawdzać kolejnych liczb, zaś jeśli tak to sprawdzamy liczby b1=a-2 oraz b2=a+2. Jeśli, któraś z liczb b1, b2 jest liczbą pierwszą to wtedy mówimy, że liczby tworzą parę liczb bliźniaczych.
Zadanie 2.
Zapisz algorytm (w postaci listy kroków, schematu blokowego lub w wybranym języku programowania) sprawdzający, czy dana liczba należy do pary liczb bliźniaczych. Twój algorytm powinien być zgodny z poniższą specyfikacją.
Uwaga: w zapisie możesz wykorzystać tylko operacje dodawania, odejmowania, mnożenia, dzielenia, dzielenia całkowitego i brania reszty z dzielenia całkowitego, operacje logiczne oraz samodzielnie napisane funkcje.
Specyfikacja algorytmu:
Dane:
a – dodatnia liczba całkowita, a ≥ 3
Wynik:
komunikat TAK, jeżeli a należy do pary liczb bliźniaczych
komunikat NIE, jeżeli a nie należy do pary liczb bliźniaczych
Algorytm:
#include <iostream> #include <math.h> using namespace std; bool czypierwsza(int a) { bool spr; if(a<2) spr = false; //gdy liczba jest mniejsza niz 2 to nie jest pierwsza for(int i=2;i<=sqrt(a);i++) { if(a%i==0) { spr = false; break; } spr = true; } return spr; } int main() { cout << "Podaj liczbe: "; int liczba; cin >> liczba; if (( czypierwsza(liczba)&& czypierwsza(liczba-2)) || (czypierwsza(liczba) && czypierwsza(liczba+2))) cout << "TAK"; else cout << "NIE" << endl; return 0; }