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[edit | edit source]
Se dau n numere naturale. Aflaţi câte dintre aceste numere sunt prime.
Date de intrare[edit | edit source]
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[edit | edit source]
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[edit | edit source]
- 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[edit | edit source]
Exemplul 1[edit | edit source]
- eratostene1.in
- 6
- 12 18 19 25 29 7
- Ieșire
- Datele sunt corecte.
- eratostene1.out
- 3
Exemplul 2[edit | edit source]
- eratostene1.in
- 3
- 100 102 104
- Ieșire
- Datele sunt corecte.
- eratostene1.out
- 0
Exemplul 3[edit | edit source]
- eratostene1.in
- 3
- 191824719471 19991 19724174
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare[edit | edit source]
<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>