Cum funcționează
Problema pare grea, dar se simplifică mult printr-o observație: nu trebuie să cauți două numere,
ci unul singur. Dacă alegi primul număr i, al doilea este obligatoriu n - i — suma e fixată de
enunț. Deci ai o singură buclă, nu două imbricate.
Pentru fiecare i verifici dacă ambele numere sunt prime, folosind aceeași funcție estePrim de
la verificarea unui număr prim.
Bucla merge doar până la n / 2 pentru că, dincolo de jumătate, perechile se repetă în oglindă:
pentru n = 18, perechea (13, 5) e aceeași cu (5, 13), doar inversată. Oprirea la jumătate
elimină munca dublă.
break e esențial. Fără el, programul afișează toate perechile, iar enunțul cere una singură.
Un detaliu care liniștește: enunțul garantează n par și n >= 4, iar pentru astfel de numere
există întotdeauna o soluție — acesta e enunțul conjecturii lui Goldbach, verificată de
matematicieni pentru numere mult mai mari decât 30000. Nu e nevoie de o ramură „nu există".
Greșeli frecvente
- Două bucle imbricate, una pentru
i și una pentru j, cu test i + j == n — dă rezultatul
corect, dar face mii de pași inutili. Al doilea număr se calculează, nu se caută.
break uitat — se afișează toate perechile posibile în loc de una.
estePrim(n - i) uitat — se verifică doar primul număr, iar perechea afișată e greșită.
- Bucla pornită de la
i = 1 — 1 nu e prim, iar dacă estePrim nu tratează cazul n < 2,
răspunsul devine greșit chiar de la primul pas.