3502 - Hard Prime: Difference between revisions
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 == | |||
'''2, 3, 7''' și '''47''' sunt singurele numere prime din fișierul de intrare. | |||
== 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 | 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>
- 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>