1669 - Palindrom Prim Norocoase

From Bitnami MediaWiki

Cerinţa[edit | edit source]

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[edit | edit source]

Se va citi de la tastatura numărul n si n numere naturale separate prin spații.

Date de ieşire[edit | edit source]

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[edit | edit source]

  • 0 ⩽ n ⩽ 1000
  • cele n numere vor fi mai mici decât 2.000.000.000.

Exemplu[edit | edit source]

Intrare
6
2 3 5 7 11 24
Ieșire
Datele sunt introduse corect.
4

Explicație[edit | edit source]

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

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

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

</syntaxhighlight>