3502 - Hard Prime

From Bitnami MediaWiki

Cerința[edit | edit source]

Se dau n numere naturale. Să se afișeze toate numerele prime distincte dintre acestea in ordine crescătoare.

Date de intrare[edit | edit source]

Fișierul de intrare hardprimein.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire[edit | edit source]

Fișierul de ieșire hardprimeout.txt va conține pe prima linie toate numerele prime distincte citite, în ordine crescătoare, separate prin câte un spațiu.

Restricții și precizări[edit | edit source]

  • 1 ⩽ n ⩽ 30.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 2.000.000.000

Exemplu 1[edit | edit source]

hardprimein.txt
10
3 2 32 47 3 0 2 40 7 1
hardprimeout.txt
2 3 7 47

Explicație[edit | edit source]

2, 3, 7 și 47 sunt singurele numere prime din fișierul de intrare.

Exemplu 2[edit | edit source]

hardprimein.txt
0
hardprimeout.txt
Nu au fost respectate cerintele impuse


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 3502 - HardPrime

def check_restrictions(n, numbers):

   if not (1 <= n <= 30000):
       return False
   if not all(0 <= num < 2000000000 for num in numbers):
       return False
   return True

def is_prime(num):

   if num < 2:
       return False
   for i in range(2, int(num**0.5) + 1):
       if num % i == 0:
           return False
   return True
  1. Citire date de intrare

try:

   with open("hardprimein.txt", "r") as file:
       n = int(file.readline().strip())
       numbers = list(map(int, file.readline().split()))

except FileNotFoundError:

   with open("hardprimeout.txt", "w") as file_out:
       file_out.write("Nu au fost respectate cerintele impuse!")
   exit()
  1. Verificare daca sunt respectate cerintele

if not check_restrictions(n, numbers):

   with open("hardprimeout.txt", "w") as file_out:
       file_out.write("Nu au fost respectate cerintele impuse!")
   exit()
  1. Identificare și afișare numere prime distincte în ordine crescătoare

prime_numbers = sorted(set(num for num in numbers if is_prime(num)))

  1. Scriere rezultat în fișierul de ieșire

with open("hardprimeout.txt", "w") as file:

   file.write(" ".join(map(str, prime_numbers)) + "\n")

</syntaxhighlight>