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