1669 - Palindrom Prim Norocoase

From Bitnami MediaWiki
Revision as of 08:21, 25 March 2023 by Alexandra Leș (talk | contribs) (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 '''...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

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


</syntaxhighlight>