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)