1900 - Numere 16
Cerinţa[edit | edit source]
Se citește un număr natural n cu cel mult 16 cifre. Fie q numărul de cifre ale numărului n. Prin eliminarea unei singure cifre din scrierea numărului n se obține un șir de q numere. Să se afișeze în ordine crescătoare, numerele nenule din acest șir care sunt prime cu numărul n.
Date de intrare[edit | edit source]
Fișierul de intrare numere16in.txt conține pe prima linie numărul n.
Date de ieşire[edit | edit source]
Fișierul de ieșire numere16out.txt va conține pe prima linie separate printr-un spațiu, numerele care respectă proprietatea din cerință.
Restricții și precizări[edit | edit source]
- 2 ⩽ q ⩽ 16
- dacă nu avem niciun număr care respectă cerința afișăm mesajul NU EXISTA
Exemplul 1[edit | edit source]
- numere16in.txt
342477
- numere16out.txt
Datele de intrare corespund restrictiilor impuse 32477 34247 34247 34277 34477
Exemplul 2[edit | edit source]
- numere16in.txt
mARia mergeACASA
- numere16out.txt
Datele de intrare nu corespund restrictiilor impuse
Explicație[edit | edit source]
Numerele 32477 34247 34247 34277 34477 sunt afișate în ordine crescătoare și sunt prime cu numărul 342477
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def validare(n_validare):
# Verificăm dacă n are cel puțin 2 cifre și cel mult 16 cifre if len(str(n_validare)) < 2 or len(str(n_validare)) > 16: raise ValueError # Ridicăm o eroare dacă n nu are cel puțin 2 cifre sau mai mult de 16 cifre file_out.write("Datele de intrare corespund restrictiilor impuse\n")
- Funcția numere_prime_cu_n calculează numerele prime cu n
def numere_prime_cu_n(n):
from math import gcd # Convertim numărul în șir de caractere pentru a putea elimina ușor fiecare cifră n_str = str(n) q = len(n_str) # Inițializăm lista de numere prime cu n numereprime_calcul = [] # Generăm toate numerele prin eliminarea unei singure cifre for i in range(q): numar = int(n_str[:i] + n_str[i+1:]) # Verificăm dacă numărul este prim cu n și îl adăugăm în listă dacă este if numar != 0 and gcd(numar, n) == 1: numereprime_calcul.append(numar) # Sortăm lista și o returnăm numereprime_calcul.sort() return numereprime_calcul
if __name__ == '__main__':
file_in = open("numere16in.txt", "r") file_out = open("numere16out.txt", "w")
try: # Citim numărul n_main = int(file_in.readline()) # Validăm datele de intrare validare(n_main) # Calculăm numerele prime cu n numere_prime = numere_prime_cu_n(n_main) # Scriem numerele prime cu n în fișierul de ieșire if numere_prime: file_out.write(' '.join(map(str, numere_prime)) + '\n') else: file_out.write('NU EXISTA\n')
# Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>