1669 - Palindrom Prim Norocoase: Difference between revisions

From Bitnami MediaWiki
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 '''...
 
No edit summary
 
Line 2: Line 2:
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''').
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 ==
== Date de intrare ==
Se va citi de la tastatura numărul '''numar''' si '''n''' numere naturale separate prin spații.
Se va citi de la tastatura numărul '''n''' si '''n''' numere naturale separate prin spații.
== Date de ieşire ==
== Date de ieşire ==
Se va afisa numarul de numere care respecta conditiile.
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 ==
== Restricții și precizări ==
* 0 ⩽ numar ⩽ 1000
* 0 ⩽ n ⩽ 1000
* 0 ⩽ n ⩽ 2.000.000.000
* cele n numere vor fi mai mici decât 2.000.000.000.
== Exemplu ==
== Exemplu ==
; Intrare
; Intrare
Line 13: Line 14:
: 2 3 5 7 11 24
: 2 3 5 7 11 24
; Ieșire
; Ieșire
: Datele introduse corespund restricțiilor impuse.
: Datele sunt introduse corect.
: 4
: 4
== Explicație ==  
== Explicație ==  
Line 19: Line 20:
== Rezolvare ==  
== Rezolvare ==  
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#Verificăm dacă datele introduse corespund restricțiilor impuse
def validare_date_numar(numar):
def validare_date_numar(numar):
     flag = False
     flag = False
Line 31: Line 33:
         flag = True
         flag = True
     return flag
     return flag
 
#Verificăm dacă numarul introdus este prim
def prim(n):
def prim(n):
     cnt = 0
     cnt = 0
Line 43: Line 45:
     else:
     else:
         return 0
         return 0
 
#Verificăm dacă numarul introdus este palindrom,adică dacă este egal cu oglinditul său
def pal(n):
def pal(n):
     ogl = 0
     ogl = 0
Line 56: Line 58:


if __name__ == '__main__':
if __name__ == '__main__':
     n = input("Introduceti numarul de numere: ")
     n = input()
     if validare_date_numar(n):
     if validare_date_numar(n):#Dacă datele introduse sunt corecte
         n = int(n)
         n = int(n)
         numere = input("Introduceti numerele separate prin spatiu: ").split()
         numere = input().split()
         if validare_date_numere(n):
         if validare_date_numere(n):
             print("\nDatele de intrare corespund restrictiilor impuse.\n")
             print("\nDatele sunt introduse corect.\n")#Afișăm mesajul corespunzator
             cnt = 0
             cnt = 0
             for i in range(n):
             for i in range(n):
                 if pal(int(numere[i])) and prim(int(numere[i])) and int(numere[i]) % 2 == 1:
                 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
                     cnt += 1
             print("Numarul de numere care sunt palindroame prime impare:", cnt)
             print( cnt)
         else:
         else:
             print("Datele de intrare nu corespund restrictiilor impuse.")
             print("Datele nu corespund restricțiilor impuse.")
     else:
     else:
         print("Datele de intrare nu corespund restrictiilor impuse.")
         print("Datele nu corespund restricțiilor impuse.")
 
 
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 16:36, 11 April 2023

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>