3312 - Eratostene1: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/3312/eratostene1 - 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şi... |
mNo edit summary |
||
| Line 20: | Line 20: | ||
: Datele sunt corecte. | : Datele sunt corecte. | ||
; eratostene1.out | ; eratostene1.out | ||
: | : 3 | ||
===Exemplul 2=== | ===Exemplul 2=== | ||
; eratostene1.in | ; eratostene1.in | ||
| Line 48: | Line 48: | ||
divizor = 3 | divizor = 3 | ||
while divizor * divizor <= numar: | while divizor * divizor <= numar: | ||
if numar % divizor == 0: | if numar % divizor == 0 or numar%2==0: | ||
break | break | ||
divizor += 2 | divizor += 2 | ||
Latest revision as of 20:47, 26 March 2023
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>