1669 - Palindrom Prim Norocoase: Diferență între versiuni

De la Universitas 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 '''...)
 
Fără descriere a modificării
 
Linia 2: Linia 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
Linia 13: Linia 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 ==  
Linia 19: Linia 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
Linia 31: Linia 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
Linia 43: Linia 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
Linia 56: Linia 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>

Versiunea curentă din 11 aprilie 2023 16:36

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 n si n numere naturale separate prin spații.

Date de ieşire

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

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

Exemplu

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

Explicație

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

Rezolvare

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