1669 - Palindrom Prim Norocoase

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

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.")