1669 - Palindrom Prim Norocoase: Difference between revisions
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 ''' | 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 | 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 ⩽ | * 0 ⩽ n ⩽ 1000 | ||
* | * 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 | : 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( | 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( | numere = input().split() | ||
if validare_date_numere(n): | if validare_date_numere(n): | ||
print("\nDatele | 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( | print( cnt) | ||
else: | else: | ||
print("Datele | print("Datele nu corespund restricțiilor impuse.") | ||
else: | else: | ||
print("Datele | 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>
- 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.")
</syntaxhighlight>