3502 - Hard Prime: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerința == Se dau n numere naturale. Să se afișeze toate numerele prime distincte dintre acestea in ordine crescătoare. == Date de intrare == 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 == 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...
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
== Cerința ==
== Cerința ==
Se dau n numere naturale. Să se afișeze toate numerele prime distincte dintre acestea in ordine crescătoare.
Se dau '''n''' numere naturale. Să se afișeze toate numerele prime distincte dintre acestea in ordine crescătoare.
== Date de intrare ==
== Date de intrare ==
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.
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 ==
== Date de ieșire ==
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.
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 ==
== Restricții și precizări ==
*1 ⩽ n ⩽ 30.000
*'''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
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât '''2.000.000.000'''
== Exemplu 1 ==
== Exemplu 1 ==
;hardprimein.txt
;'''hardprimein.txt'''
:10
:10
:3 2 32 47 3 0 2 40 7 1
:3 2 32 47 3 0 2 40 7 1
;hardprimeout.txt
;'''hardprimeout.txt'''
:2 3 7 47
:2 3 7 47
;Explicație
== Explicație ==
:2, 3, 7 și 47 sunt singurele numere prime din fișierul de intrare.
'''2, 3, 7''' și '''47''' sunt singurele numere prime din fișierul de intrare.
<br>
== Exemplu 2 ==
== Exemplu 2 ==
;hardprimein.txt
;'''hardprimein.txt'''
:0
:0
;hardprimeout.txt
;'''hardprimeout.txt'''
:Nu au fost respectate cerintele impuse
:Nu au fost respectate cerintele impuse
<br>
<br>
Line 26: Line 25:
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
#3502 - HardPrime
#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
# 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()
# 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()
# Identificare și afișare numere prime distincte în ordine crescătoare
prime_numbers = sorted(set(num for num in numbers if is_prime(num)))
# Scriere rezultat în fișierul de ieșire
with open("hardprimeout.txt", "w") as file:
    file.write(" ".join(map(str, prime_numbers)) + "\n")


</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 14:23, 5 January 2024

Cerința[edit]

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

Date de intrare[edit]

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]

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]

  • 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]

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

Explicație[edit]

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

Exemplu 2[edit]

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


Rezolvare[edit]

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