1669 - Palindrom Prim Norocoase

De la Universitas MediaWiki
Versiunea din 25 martie 2023 08:21, autor: Alexandra Leș (discuție | contribuții) (Pagină nouă: == 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 '''...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

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 numar 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

  • 0 ⩽ numar ⩽ 1000
  • 0 ⩽ n ⩽ 2.000.000.000

Exemplu

Intrare
6
2 3 5 7 11 24
Ieșire
Datele introduse corespund restricțiilor impuse.
4

Explicație

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

Rezolvare

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

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

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("Introduceti numarul de numere: ")
    if validare_date_numar(n):
        n = int(n)
        numere = input("Introduceti numerele separate prin spatiu: ").split()
        if validare_date_numere(n):
            print("\nDatele de intrare corespund restrictiilor impuse.\n")
            cnt = 0
            for i in range(n):
                if pal(int(numere[i])) and prim(int(numere[i])) and int(numere[i]) % 2 == 1:
                    cnt += 1
            print("Numarul de numere care sunt palindroame prime impare:", cnt)
        else:
            print("Datele de intrare nu corespund restrictiilor impuse.")
    else:
        print("Datele de intrare nu corespund restrictiilor impuse.")