0409 - Oglindit 4

From Bitnami MediaWiki
Revision as of 15:53, 28 April 2023 by Robert Manc (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinţa[edit | edit source]

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

Date de intrare[edit | edit source]

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

Date de ieşire[edit | edit source]

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

Restricții și precizări[edit | edit source]

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

Exemplu1[edit | edit source]

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

Explicație[edit | edit source]

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

Exemplu2[edit | edit source]

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

Explicație[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> 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.")

</syntaxhighlight>

Explicație[edit | edit source]

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.