Matura 2016 (maj). Zadanie 6. Liczby
Liczba pierwsza to liczba naturalna większa od 1, która ma dokładnie dwa dzielniki naturalne: 1 i samą siebie. Przykłady liczb pierwszych: 11, 17, 23.
Liczba 21 nie jest liczbą pierwszą, ponieważ oprócz liczb 1 i 21 jej dzielnikami są także 3 i 7.
W pliku dane_6.txt znajduje się 2000 liczb całkowitych o wartościach z zakresu <0;30000>, każda liczba zapisana jest w osobnym wierszu.
Napisz program, który da odpowiedzi do poniższych zadań. Każdą odpowiedź zapisz w pliku wyniki_6.txt, poprzedź ją numerem odpowiedniego zadania.
Zadanie 1.
Podaj, ile liczb zapisanych w pliku dane_6.txt to liczby pierwsze.
Rozwiązanie:
#include <iostream> #include <fstream> #define N 2000 using namespace std; bool liczba_pierwsza(int a) { int i=2; bool wynik = true; while (a>i) { if (a%i==0) { wynik = false; break; } i++; } return wynik; } int main() { int tab[N]; int ile=0; ifstream plik; plik.open("dane4.txt"); for (int i=0; i<N; i++){ plik >> tab[i]; if (liczba_pierwsza(tab[i])) ile++; } cout << ile << endl;; plik.close(); ofstream wynik; wynik.open("wynik_6.txt"); wynik << "Liczb pierwszych jest : " << ile; wynik.close(); return 0; }
Zadanie 2.
Podaj, jaka jest największa oraz jaka jest najmniejsza liczba pierwsza z pliku dane_6.txt.
Rozwiązanie:
#include <iostream> #include <fstream> #define N 2000 using namespace std; bool liczba_pierwsza(int a) { int i=2; bool wynik = true; while (a>i) { if (a%i==0) { wynik = false; break; } i++; } return wynik; } int main() { int tab[N]; int maksimum=0, minimum=30000; ifstream plik; plik.open("dane4.txt"); for (int i=0; i<N; i++){ plik >> tab[i]; if (liczba_pierwsza(tab[i])) { if (tab[i]>maksimum) maksimum=tab[i]; if (tab[i]<minimum) minimum=tab[i]; } } cout << maksimum << endl; cout << minimum << endl; plik.close(); ofstream wynik; wynik.open("wynik_6.txt"); wynik << "Maksymalana liczba pierwsza jest to : " << maksimum << endl; wynik << "Minimalna liczba pierwsza jest to : " << minimum; wynik.close(); return 0; }
Zadanie 3.
Liczby bliźniacze to takie dwie liczby pierwsze, które różnią się o 2, np.: (3, 5), (5, 3), (11, 13) lub (19, 17).
Zbadaj w pliku dane_6.txt kolejne pary sąsiadujących ze sobą liczby, tzn. pierwszą i drugą liczbę, drugą i trzecią liczbę, …, przedostatnią i ostatnią liczbę. Podaj liczbę par liczb bliźniaczych oraz wypisz wszystkie te pary. Każdą parę wypisz w osobnym wierszu.
Przykład:
Dla poniższych danych
11698
13234
1999
1997
16444
15173
5927
odpowiedzią jest:
1
1999 i 1997.
Rozwiązanie:
#include <iostream> #include <fstream> #define N 2000 using namespace std; bool liczba_pierwsza(int a) { int i=2; bool wynik = true; while (a>i) { if (a%i==0) { wynik = false; break; } i++; } return wynik; } int main() { int tab[N]; ifstream plik; plik.open("dane4.txt"); for (int i=0; i<N; i++){ plik >> tab[i]; } plik.close(); ofstream wynik; int w=0; wynik.open("wynik_6.txt"); for (int i=0; i<N-1; i++) if (liczba_pierwsza(tab[i]) && liczba_pierwsza(tab[i+1])) if ((tab[i]==tab[i+1]+2) || (tab[i]==tab[i+1]-2)) { w++; wynik << tab[i] << " " << tab[i+1] << endl; } wynik << w; wynik.close(); return 0; }