# PBinfo #4250 – Inlocuire_10 – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: Darius

## Enunț

Cerința
Se dă un tablou cu n elemente, numere naturale mai mari decât 1. Să se înlocuiască fiecare element din tablou cu produsul dintre suma divizorilor săi și numărul său de divizori și apoi să afișeze elementele tabloului de la dreapta la stânga.

Se vor defini și apela următoarele subprograme:


citire, care citește de la tastatură valoarea lui n și cele n elemente ale tabloului
afisare, care afișează pe ecran elementele tabloului printr-o parcurgere de la dreapta la stânga, separate prin exact un spațiu
suma_div, care determină suma divizorilor unui număr dat
nr_div, care determină numărul divizorilor unui număr dat

În programele C/C++ nu se vor folosi variabile globale.

Date de intrare
Se citește de la tastatură numărul n, iar apoi cele n elemente ale tabloului.

Date de ieșire
Se vor afișa pe ecran elementele tabloului după modificarea cerută, separate prin exact un spațiu.

Restricții și precizări

1 ≤ n ≤ 1000
elementele tabloului vor fi mai mici decât 10.000

Exemplu:
Intrare

7
7 18 18 5 14 20 4 
Ieșire

21 252 96 12 234 234 16  
Explicație
Modificările efectuate sunt:

7 se înlocuiește cu 16 deoarece are suma divizorilor egala cu 8 și are 2 divizori (8*2=16).
18 se înlocuiește cu 234 deoarece are suma divizorilor egala cu 39 și are 6 divizori (39*6=234).
…
4 se înlocuiește 21 deoarece are suma divizorilor egala cu 7 și are 3 divizori (7*3=21).

La final, elementele sunt afișate de la dreapta la stânga.

## Cod sursă C++

```cpp
#include <iostream>
using namespace std;
void citire(int A[], int &n)
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>A[i];
}
int suma_div(int n)
{
    int s=0;
    for(int d=1;d*d<=n;d++)
        if(n%d==0)
        {
            s=s+d;
            if(d*d!=n) s=s+n/d;
        }
    return s;
}
int nr_div(int n)
{
    int c=0;
    for(int d=1;d*d<=n;d++)
        if(n%d==0)
        {
            c++;
            if(d*d!=n) c++;
        }
    return c;
}
void afisare(int A[], int n)
{
    for(int i=n;i>=1;i--)
        cout<<A[i]<<" ";
}
void inlocuire(int A[], int n)
{
    for(int i=1;i<=n;i++)
        A[i]=suma_div(A[i])*nr_div(A[i]);
}
int main()
{
    int A[1001],n;
    citire(A,n);
    inlocuire(A,n);
    afisare(A,n);
    return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/4250)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/4250/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-4250/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
