1669 - Palindrom Prim Norocoase

De la Universitas MediaWiki

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 condițiile. Dacă datele sunt introduse corect,pe ecran se va afișa :"Datele sunt introduse corect.",apoi pe un rând nou numarul de numere care respecta condițiile.În cazul contrar,se va afișa pe ecran "Datele nu corespund restricțiilor impuse.".

Restricții și precizări

  • 0 ⩽ 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
Datele sunt introduse corect.
4

Explicație

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

Rezolvare

#Verificăm dacă datele introduse corespund restricțiilor impuse
def validare_date_numar(numar):
    flag = False
    if numar.isdigit():
        if 0 <= int(numar) <= 2_000_000_000:
            flag = True
    return flag

def validare_date_numere(n):
    flag = False
    if 0 <= int(n) <= 1000:
        flag = True
    return flag
#Verificăm dacă numarul introdus este prim
def prim(n):
    cnt = 0
    for i in range(1, int(n ** 0.5) + 1):
        if n % i == 0:
            cnt += 2
        if i * i == n:
            cnt -= 1
    if cnt == 2:
        return 1
    else:
        return 0
#Verificăm dacă numarul introdus este palindrom,adică dacă este egal cu oglinditul său
def pal(n):
    ogl = 0
    cn = n
    while n:
        ogl = ogl * 10 + n % 10
        n //= 10
    if ogl == cn:
        return 1
    else:
        return 0

if __name__ == '__main__':
    n = input()
    if validare_date_numar(n):#Dacă datele introduse sunt corecte
        n = int(n)
        numere = input().split()
        if validare_date_numere(n):
            print("\nDatele sunt introduse corect.\n")#Afișăm mesajul corespunzator
            cnt = 0
            for i in range(n):
                if pal(int(numere[i])) and prim(int(numere[i])) and int(numere[i]) % 2 == 1:#Verificăm câte numere sunt palindrom prim norocoase
                    cnt += 1
            print( cnt)
        else:
            print("Datele nu corespund restricțiilor impuse.")
    else:
        print("Datele nu corespund restricțiilor impuse.")