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;
}