Un enunt clasic:
"Dat fiind un numar intreg fixat ca limita, sa se gaseasca toate numerele prietene pana la aceasta limita, inclusiv."
Numerele naturale
x si y sunt prietene daca toti divizorii lui x, exclusiv x, inclusiv 1,
insumati, egaleaza y si reciproc.
Prima pereche de
numere prietene este (220, 284) pentru ca suma divizorilor
lui 220, 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110, este egala
cu 284.
Divizorii
lui 284 sunt 1, 2, 4, 71 si 142 iar suma lor este 220.
In
codul urmator, functia isFriend(...) testeaza secvential toate numerele intre 1
si numarul-limita, inclusiv, calculand suma divizorilor, sum_div. Numarului
obtinut astfel i se calculeaza, de asemenea, divizorii iar daca suma lor este
egala cu numarul natural luat ca argument la iteratia curenta, i, atunci cele
doua numere, i si sum_div, sunt prietene.
Variabila
globala int last memoreaza ultimul numar
prieten determinat ca suma a divizorilor la o iteratie oarecare i.
Acesta
este "sarit" cand variabila-contor ajunge la el, pentru evitarea
duplicarii perechilor.
isFriend(...)
intoarce 1 daca este gasita o pereche de numere prietene si 0 in caz contrar,
ceea ce permite determinarea numarului de perechi ca suma a rezultatelor
intoarse pe parcursul iteratiilor.
Codul
si prinscreenul: