fbpx

Problema #406 – SumCifPrim – Rezolvari PBInfo

de Mihai-Alexandru

Cerinţa

Se dă un șir cu n numere naturale. Determinați câte dintre ele sunt prime și au suma cifrelor un număr prim.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale.

Date de ieşire

Programul afișează pe ecran numărul C, reprezentând rezultatul 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

6
83 36 53 401 90 7

Ieșire

3

Explicație

Dintre cele 6 numere citite sunt prime : 83 53 401 7. Dintre ele 83 401 7 su suma cifrelor număr prim, respectiv 11 5 7. În consecință, sunt 3 numere care respectă regula.

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

int main()
{
    int n, cnt = 0;
    cin >> n;
    for(int i = 1; i <= n; ++i){
        int x, sumcif=0;
        cin >> x;
        int cx = x;
        while(x){
            sumcif += x % 10;
            x /= 10;
        }
        x = cx;
        int cn = 1, d = 2;
        while(x > 1){
            int p = 0;
            while(x % d == 0)
                x/=d, p++;
            cn = cn * (p + 1);
            d++;
            if(d * d > x)
                d = x;
        }
        if(cn == 2){
            d = 2;
            cn = 1;
            while(sumcif > 1){
                int p = 0;
                while(sumcif % d == 0)
                    sumcif/=d, p++;
                cn = cn * (p + 1);
                d++;
                if(d * d > sumcif)
                    d = sumcif;
            }
            if(cn == 2)
                cnt++;
        }
    }
    cout << cnt;
    return 0;
}
Comentarii

S-ar putea sa iti placa