0409 - Oglindit 4: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
Line 66: Line 66:


</syntaxhighlight>
</syntaxhighlight>
== 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'''.

Latest revision as of 15:53, 28 April 2023

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

<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

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.