3312 - Eratostene1

De la Universitas MediaWiki

Sursa: - Eratostene1


Cerinţa

Se dau n numere naturale. Aflaţi câte dintre aceste numere sunt prime.

Date de intrare

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

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fişierul de ieşire eratostene1.out va conţine pe prima linie numărul nr_prime, numărul numerelor prime aflate în fişierul de intrare. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".

Restricţii şi precizări

  • 1 ≤ n ≤ 500.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000

Exemple

Exemplul 1

eratostene1.in
6
12 18 19 25 29 7
Ieșire
Datele sunt corecte.
eratostene1.out
3

Exemplul 2

eratostene1.in
3
100 102 104
Ieșire
Datele sunt corecte.
eratostene1.out
0

Exemplul 3

eratostene1.in
3
191824719471 19991 19724174
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare

#3312 Eratostene1

def eratostene(vector, n):
    nr_prime = 0
    for i in range(n):
        numar = vector[i]
        if numar == 2:
            nr_prime += 1
        divizor = 3
        while divizor * divizor <= numar:
            if numar % divizor == 0 or numar%2==0:
                break
            divizor += 2
        if divizor ** 2 > numar:
            nr_prime += 1
    f = open("eratostene1.out", "w")
    f.write(str(nr_prime))


def conform_restrictiilor():
    vector = list()
    with open('eratostene1.in') as f:
        lines = f.readlines()
        for line in lines:
            for c in line.split():
                if c.isdigit() == True:
                    vector.append(int(c))
    n = vector[0]
    vector = vector[1:]
    if n > 500000 and n < 1:
        print("Datele nu sunt comform restricțiilor impuse.")
        exit()
    for x in vector:
        if x < 0 or x > 1000000:
            print("Datele nu sunt comform restricțiilor impuse.")
            exit()
    print("Datele sunt corecte.")
    return vector, n


if __name__ == '__main__':
    vector, n = conform_restrictiilor()
    eratostene(vector, n)