Showing posts with label amicable numbers. Show all posts
Showing posts with label amicable numbers. Show all posts

Saturday, January 23, 2016

Limbajul C++. Numere prietene.

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: