fbpx

Problema #1669 – palindrom_prim_norocoase – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dau n numere naturale. Aflaţi câte dintre ele sunt palindrom prim norocoase. Un număr este palindrom prim norocos dacă este palindrom (egal cu răsturnatul său, de exemplu 121), prim (are exact 2 divizori, de exemplu 3) şi norocos (pătratul numărului se poate scrie ca sumă de numere consecutive, exemplu 3. 3 * 3 = 9 = 2 + 3 + 4).

Date de intrare

Se va citi de la tastatura numărul n si n numere naturale separate prin spații.

Date de ieșire

Se va afisa numarul de numere care respecta conditiile.

Restricții și precizări

  • 1 ≤ n ≤ 1000
  • cele n numere vor fi mai mici decât 2.000.000.000.

Exemplu

Intrare

6
2 3 5 7 11 24

Ieșire

4

Explicație

Sunt 6 numere, dintre care doar 4 respectă condițiile: 3, 5, 7 şi 11.

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

int prim(int n)
{
    int cnt=0;
    for(int i = 1 ; i * i <= n ; ++i)
    {
        if(n%i==0)
            cnt+=2;
        if(i*i==n)
            cnt--;
    }
    if(cnt==2)
        return 1;
    else
        return 0;
}

int pal(int n)
{
    int ogl=0;
    int cn=n;
    while(n)
    {
        ogl=ogl*10+n%10;
        n/=10;
    }
    if(ogl==cn)
        return 1;
    else
        return 0;
}

int main()
{
    int n;
    cin >> n;
    int a[1000];
    int cnt=0;
    for(int i = 0 ; i < n ; ++i)
        cin >> a[i];
    for(int i = 0 ; i < n ; ++i)
    {
        if(pal(a[i])&&prim(a[i])&&a[i]%2==1)
            cnt++;
    }
    cout << cnt;
    return 0;
}
Comentarii

S-ar putea sa iti placa