fbpx

Problema #3272 – SumDivOgl – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dau n numere naturale. Determinați suma divizorilor oglinditelor celor n numere.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.

Date de ieșire

Programul va afișa pe ecran numărul S, reprezentând suma cerută.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu

Intrare

3
12 23 30

Ieșire

99

Explicație

Oglinditul lui 12 este 21; suma divizorilor săi este 32. Oglinditul lui 23 este 32; suma divizorilor săi este 63. Oglinditul lui 30 este 3; suma divizorilor săi este 4.

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

int main()
{
    int n;
    cin >> n;
    unsigned long long suma = 0;
    for(int i = 1; i <= n; ++i){
        int x;
        cin >> x;
        int ogl = 0;
        while(x){
            ogl = ogl * 10 + x % 10;
            x/=10;
        }
        for(int d = 1; d * d <= ogl; ++d){
            if(ogl % d == 0)
                suma += d, suma += ogl/d;
            if(d * d == ogl)
                suma -= d;
        }
    }
    cout << suma;
    return 0;
}
Comentarii

S-ar putea sa iti placa