# PBinfo #3460 – FirstPrime – Rezolvare C++

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

## Enunț

Cerința
Se dau n numere naturale. Definim FP(x) cel mai mic număr prim care îl divide pe x. Aflați suma FP-urilor 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.

Restricții și precizări

2 ≤ n ≤ 1.000.000
cele n numere citite vor fi mai mici decât 100.000.000

Exemplu:
Intrare

4
2 13 9 25
Ieșire

23

## Cod sursă C++

```cpp
/// Solutie - Moca Andrei - 100p
#include <bits/stdc++.h>
namespace FastRead {
    const int Dim(5000);
    char ibuf[Dim];
    int ipos, ilen;
    char nc()
    {
        if (ipos == ilen)
        {
            ipos = 0;
            ilen = fread(ibuf, 1, Dim, stdin);
            if (!ilen) return EOF;
        }
        return ibuf[ipos++];
    }
    template<class T> void read(T& x)
    {
        char ch;
        int sgn = 1;
        while (!isdigit(ch = nc()))
            if (ch == '-')
                sgn = -1;
        x = ch - '0';
        while (isdigit(ch = nc()))
            x = x * 10 + (ch - '0');
        x *= sgn;
    }
}
using namespace FastRead;
using namespace std;
const int N(1e8);
int lp[N + 1];
vector<int> pr;
int n, x, to;
int64_t res;
int main()
{
    for (int i = 3; i <= N; i += 2) {
        if (lp[i] == 0) {
            lp[i] = i;
            pr.emplace_back(i);
        }
        to = min(N / i, lp[i]);
        for (int j = 0; j < static_cast<int>(pr.size()) && pr[j] <= to; ++j)
            lp[i * pr[j]] = pr[j];
    }
    read(n);
    for (int i = 1; i <= n; ++i) {
        read(x);
        if (x % 2 == 0 && x > 1)
            res += 2;
        else res += lp[x];
    }
    cout << res;
    return 0;
}
```

## Resurse

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