1900 - Numere 16

From Bitnami MediaWiki

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>

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


  1. 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>