Clasa a X-a · Subprograme (funcții)Read in English
Funcție de primalitate în C++
În engleză: Primality function
Ideea
Scriem o singură dată funcția estePrim(x), care întoarce true dacă x este prim, și o apelăm pentru fiecare număr citit. Funcția caută un divizor d între 2 și radical din x (condiția d * d <= x); dacă găsește unul, iese imediat cu return false. Numerele 0 și 1 nu sunt prime. Se citesc n și apoi n numere naturale; se afișează cele prime.
Descrierea în engleză
We write the function estePrim(x) once, returning true if x is prime, and call it for every number read. The function looks for a divisor d between 2 and the square root of x (the condition d * d <= x); if it finds one, it exits immediately with return false. 0 and 1 are not prime. n and then n natural numbers are read; the prime ones are printed.
- Complexitate
- O(n * sqrt(M)), unde M este cea mai mare valoare citită
- Clasa
- Clasa a X-a (Grade 10)
- Capitol
- Subprograme (funcții)
Exemple
Intrare
6 2 9 13 1 17 20
Ieșire așteptată
2 13 17
Intrare
4 97 100 0 101
Ieșire așteptată
97 101
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Funcție de primalitate
* Clasa: 10
* Capitol: Subprograme (funcții)
* Descriere: Scriem o singură dată funcția estePrim(x), care întoarce true dacă
* x este prim, și o apelăm pentru fiecare număr citit. Funcția caută
* un divizor d între 2 și radical din x (condiția d * d <= x); dacă
* găsește unul, iese imediat cu return false. Numerele 0 și 1 nu sunt prime.
* Se citesc n și apoi n numere naturale; se afișează cele prime.
* Complexitate: O(n * sqrt(M)), unde M este cea mai mare valoare citită
*
* Exemplu
* Intrare:
* 6
* 2 9 13 1 17 20
* Ieșire: 2 13 17
*
* Exemplu
* Intrare:
* 4
* 97 100 0 101
* Ieșire: 97 101
*/
#include <iostream>
using namespace std;
// Întoarce true dacă x este număr prim.
bool estePrim(int x)
{
if (x < 2)
return false;
for (int d = 2; d * d <= x; d++)
{
if (x % d == 0)
return false;
}
return true;
}
int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
if (estePrim(x))
cout << x << ' ';
}
cout << '\n';
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.