0409 - Oglindit 4

De la Universitas MediaWiki

Cerinţa

Se dau n numere naturale. Determinați câte dintre ele au proprietatea că sunt prime cu oglinditul lor.

Date de intrare

Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spaţii.

Date de ieşire

Programul afișează pe ecran numărul suma_perechi_oglindite, reprezentând valoarea ceruta.

Restricții și precizări

  • n ∈ Ν
  • 1 ⩽ numar1, numar2 ⩽ 1.000
  • cele n numere citite vor fi mai mici decât 1.000.000.000

Exemplu1

Intrare
5
24 50 25 81 359
Ieșire
Datele de intrare corespund restricțiilor impuse.
1

Explicație

Numărul care este prim cu oglinditul lui este 359 (prim cu 953).

Exemplu2

Intrare
6
37 95 79 101 12 48
Ieșire
Datele de intrare corespund restricțiilor impuse.
3

Explicație

Numerele care sunt prime cu oglinditul lor sunt 37 (prim cu 73), 79 (prim cu 997) și 101 (prim cu 101).

Rezolvare

def validare_date(numar, numere):
    flag = False
    if 0 <= int(numar) <= 1000:
        flag = all(isinstance(x, int) and 1 <= x <= 1000000000 for x in numere)
    return flag


def oglindit(nr):
    ogl = 0
    while nr:
        ogl = ogl * 10 + nr % 10
        nr //= 10
    return ogl


def este_prim(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True


if __name__ == '__main__':
    n = int(input())
    numere = list(map(int, input().split()))
    if validare_date(n, numere):
        print("\nDatele de intrare corespund restricțiilor impuse.\n")
        oglindite = [oglindit(nr) for nr in numere]
        suma_perechi_oglindite = [(nr, ogl) for nr, ogl in zip(numere, oglindite)
                   if este_prim(nr) and este_prim(ogl)]
        print(len(suma_perechi_oglindite))
    else:
        print("Datele de intrare nu corespund restricțiilor impuse.")

Explicație

Programul citește de la tastatură un număr întreg n și o listă de n numere întregi numere. Verifică dacă datele introduse respectă restricțiile impuse, adică 0 <= n <= 1000 și 1 <= numere[i] <= 10^9 pentru orice i între 0 și n-1. Dacă datele introduse sunt valide, atunci pentru fiecare număr întreg din lista numere se calculează numărul oglindit al acestuia (se inversează ordinea cifrelor). Pentru fiecare pereche de numere din lista numere și oglindite, se verifică dacă ambele numere din pereche sunt prime. Dacă ambele numere dintr-o pereche sunt prime, atunci perechea este inclusă într-o listă numită suma_perechi_oglindite. La final, se afișează numărul de perechi de numere prime din lista numere și oglindite.