fbpx

Problema #1574 – Prietene – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dau două numere naturale. Să se afle dacă aceste numere sunt prietene. Numerele prietene sunt perechile de numere în care fiecare număr în parte este suma tuturor divizorilor celuilalt număr, mai puțin acesta.

Date de intrare

Programul citește de la tastatură două numere a și b.

Date de ieșire

Programul va afișa pe ecran mesajul PRIETENE dacă cele două numere sunt prietene, respectiv NU SUNT PRIETENE dacă aceste numere nu sunt prietene.

Restricții și precizări

  • 1 ≤ a ≤ 100.000
  • 1 ≤ b ≤ 100.000

Exemplu

Intrare

220 284

Ieșire

PRIETENE

Explicație

Divizorii lui 220 sunt 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 și 110, iar suma acestora este 284. Divizorii lui 284 sunt 1, 2, 4, 71 și 142, iar suma acestora este 220.

#include <bits/stdc++.h>
using namespace std;

int main ()
{
    int n;
    int m;
    cin >> n >> m;
    int s=0, u=0;
    for (int i = 1; i * i <= n; ++i)
    {
        if (n % i == 0)
        {
            s+=i;
            s+=(n/i);
        }
        if (i * i == n)
        s-=i;
    }
    s-=n;
    for (int i = 1; i * i <= m; ++i)
    {
        if (m % i == 0)
        {
            u+=i;
            u+=(m/i);
        }
        if (i * i == m)
        u-=i;
    }
    u-=m;
    if (s==m && u==n)
    cout << "PRIETENE";
    else
    cout << "NU SUNT PRIETENE";
    return 0;
}
Comentarii

S-ar putea sa iti placa