1669 - Palindrom Prim Norocoase
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>