2576 - Ciurul Lui Eratosthenes: Difference between revisions
No edit summary |
Nagy Lenard (talk | contribs) No edit summary |
||
Line 22: | Line 22: | ||
; Ieșire | ; Ieșire | ||
: Datele sunt corecte. | : Datele sunt corecte. | ||
;Explicație | |||
: Nu exista numere prime mai mici decat 2. | : Nu exista numere prime mai mici decat 2. | ||
===Exemplul 3=== | ===Exemplul 3=== |
Revision as of 15:04, 8 April 2023
Sursa: - Ciurul Lui Eratosthenes
Cerinţa
Să se afișeze numerele prime de la 1 la n.
Date de intrare
Se citește numărul n.
Date de ieșire
Se vor afișa numerele prime de la 1 la n, în ordine crescătoare,separate printr-un spațiu iar pe ecran se va afisa "Datele sunt corecte.". Daca n = 1 se va afisa pe un rand nou "Nu exista numere prime mai mici decat 2.". In caz contrar, se va afisa "Datele nu sunt comform restricțiilor impuse.".
Restricţii şi precizări
- 1 ≤ n ≤ 1.000.000
Exemple
Exemplul 1
- Intrare
- 30
- Ieșire
- Datele sunt corecte.
- 2 3 5 7 11 13 17 19 23 29
Exemplul 2
- Intrare
- 1
- Ieșire
- Datele sunt corecte.
- Explicație
- Nu exista numere prime mai mici decat 2.
Exemplul 3
- Intrare
- 154242352352
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 2576 Ciurul Lui Eratosthenes
def ciur(n):
if n < 2: print("Nu exista numere prime mai mici decat 2.") else: prime = [] for i in range(2, n+1): e_prim = True for j in range(2, int(i ** 0.5) + 1): if i % j == 0: e_prim = False break if e_prim: prime.append(i) print(*prime)
def conform_restrictiilor():
n = int(input()) if n > 1000000 or n < 1: print("Datele nu sunt comform restricțiilor impuse.") exit() print("Datele sunt corecte.") return n
if __name__ == '__main__':
n = conform_restrictiilor() ciur(n)
</syntaxhighlight>
Explicaţie cod
Funcția conform_restrictiilor() citește de la tastatură un număr întreg n și verifică dacă acesta respectă restricțiile impuse: trebuie să fie între 1 și 1.000.000. Dacă datele sunt conforme, funcția returnează n.
Funcția ciur(n) primește ca argument un număr întreg n. Această funcție determină toate numerele prime mai mici sau egale cu n, utilizând algoritmul Ciurul lui Eratostene. În această implementare, se initializează o listă vidă prime pentru a stoca numerele prime. Se iterează prin fiecare număr întreg de la 2 până la n și pentru fiecare număr se verifică dacă este prim sau nu, utilizând un al doilea for care merge de la 2 până la radicalul pătrat din i (care este cel mai mare divizor posibil). Dacă numărul i este divizibil cu un alt număr întreg în intervalul [2, radicalul pătrat din i], atunci nu este prim și se trece la următorul număr. Dacă numărul i trece prin această verificare, atunci este adăugat în lista prime. La final, funcția afișează lista prime, folosind * pentru a extrage toate elementele acesteia.
În secțiunea if __name__ == '__main__':, se apelează mai întâi funcția conform_restrictiilor() pentru a verifica dacă datele citite de la tastatură sunt conform restricțiilor. Apoi, se apelează funcția ciur(n) pentru a determina și afișa toate numerele prime mai mici sau egale cu n.