fbpx

Problema #443 – DivizoriPrimi – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se dau n numere naturale. Calculaţi suma obținută prin adunarea primului divizor prim al fiecărui număr citit.

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 afișează pe ecran numărul S, reprezentând suma cerută.

Restricţii şi precizări

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

Exemplu

Intrare

5
15 13 39 49 25

Ieșire

31

Explicație

Pentru numerele date, primul divizor prim este, respectiv: 3 13 3 7 5, cu suma 31.

#include <bits/stdc++.h>
using namespace std;
int prim(long long n)
{
    long long d=2;
    long long p;
    while (n>1)
    {
        p=0;
        while(n%d==0) {p++;n/=d;}
        if(p>0) return d;
        d++;
        if(d*d>n) d=n;
    }
}
int main()
{
   long long n,x,s=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        {
            cin>>x;
            s=s+prim(x);
        }
        cout<<s;
    return 0;
}
Comentarii

S-ar putea sa iti placa