Cum verific dacă un număr este prim în C++?
Tratezi n < 2 separat, apoi cauți un divizor de la 2 până la radical din n, cu condiția d * d <= n. Dacă nu găsești niciunul, n este prim.
Un număr este prim dacă are exact doi divizori, 1 și el însuși. Testul corect și rapid arată așa:
bool esteprim(int n) {
if (n < 2) return false;
for (int d = 2; d * d <= n; d++)
if (n % d == 0)
return false;
return true;
}Trei lucruri fac diferența între „merge” și „ia toate punctele”:
n < 2se tratează separat. 0 și 1 nu sunt prime. Fără această linie, bucla nu pornește și funcția le declară prime.- Se caută doar până la radical din
n. Orice număr compus are un divizor cel mult egal cu radicalul său: dacăn = a · bcua ≤ b, atuncia ≤ √n. Pentrunde un miliard, faci vreo treizeci de mii de pași în loc de un miliard. La bac se punctează eficiența, decid <= n / 2saud < npierd puncte. - Condiția are ≤, nu <. Se scrie
d * d <= n. Cu<, pătratele numerelor prime (4, 9, 25, 49) ar fi declarate prime.
Scrii d * d <= n și nu d <= sqrt(n) ca să rămâi la întregi. Lecția despre numere prime demonstrează de ce ajunge radicalul.
Lecția care merge mai departe: Numere prime