3312 - Eratostene1
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
<syntaxhighlight lang="python" line>
- 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)
</syntaxhighlight>