0988 - Prime: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: == Cerinţa == Se dă un tablou cu '''n''' elemente, numere naturale. Să se afișeze numerele prime din șir, în ordinea în care apar în șir. Se va defini și apela subprogramul '''prim''', care verifică dacă un număr natural transmis ca parametru este prim. ==Date de intrare == Fișierul de intrare '''in.txt''' conține pe prima linie numărul '''n''', iar iar pe a doua linie cele n elemente ale tabloului. == Date de ieșire == Fișierul de intrare '''out.txt''' va...)
 
Linia 13: Linia 13:
== Exemplu 1 ==
== Exemplu 1 ==
; in.txt
; in.txt
: 5
5
: 12 2 123 41 77
12 2 123 41 77
; out.txt
; out.txt
: 2 41
2 41
 
==Exemplu 2==
==Exemplu 2==
;in.txt
;in.txt

Versiunea de la data 14 noiembrie 2023 22:43

Cerinţa

Se dă un tablou cu n elemente, numere naturale. Să se afișeze numerele prime din șir, în ordinea în care apar în șir. Se va defini și apela subprogramul prim, care verifică dacă un număr natural transmis ca parametru este prim.

Date de intrare

Fișierul de intrare in.txt conține pe prima linie numărul n, iar iar pe a doua linie cele n elemente ale tabloului.

Date de ieșire

Fișierul de intrare out.txt va conține pe prima linie elementele cerute, separate prin exact un spațiu.

Restricţii şi precizări

  • 1 ≤ n ⩽ 1000

elementele tabloului vor fi mai mici decât 1.000.000.000

Exemplu 1

in.txt
5
12 2 123 41 77
out.txt
2 41

Exemplu 2

in.txt
4
12 4 2 43
out.txt
2 43

Rezolvare

def prim(numar):
    if numar <= 1:
        return False
    for i in range(2, int(numar**0.5) + 1):
        if numar % i == 0:
            return False
    return True

if __name__ == "__main__":
    # Citim numarul de numere din fisierul de intrare
    with open("in.txt", "r") as infile:
        n = int(infile.readline().strip())

        # Verificăm dacă numărul de numere este în intervalul 1-1000
        if 1 <= n <= 1000:
            # Citim și procesăm restul datelor
            tablou = list(map(int, infile.readline().strip().split()))

            # Găsim și filtrăm numerele prime
            numere_prime = [numar for numar in tablou if 1 <= numar < 1000000000 and prim(numar)]

            # Scriem numerele prime în fisierul de ieșire
            with open("out.txt", "w") as outfile:
                outfile.write(" ".join(map(str, numere_prime)))
        else:
            print("Numarul de numere trebuie sa fie intre 1 si 1000.")

Explicație

Dacă numărul de numere este valid, programul continuă să citească și să proceseze restul datelor din fișierul de intrare. Numerele sunt citite și stocate într-o listă numită tablou.

Apoi, funcția prim(numar) este folosită pentru a determina dacă un număr este prim sau nu. Funcția prim verifică dacă numărul este mai mare decât 1 și dacă are divizori între 2 și radicalul său pătrat. Dacă nu are divizori, este considerat prim.

Numerele prime sunt filtrate din lista tablou și stocate într-o listă separată numită numere_prime. Aceste numere sunt apoi scrise în fișierul de ieșire out.txt în ordinea în care apar în lista tablou.

Această structură a codului asigură că numărul de numere este valid înainte de a încerca să proceseze datele, asigurând astfel respectarea restricțiilor impuse.