Matura 2016 (maj). Zadanie 6. Liczby

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.

Dane do pobrania.

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

Leave a Reply

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>