2576 - Ciurul Lui Eratosthenes: Difference between revisions

From Bitnami MediaWiki
No edit summary
No edit summary
 
(3 intermediate revisions by 2 users not shown)
Line 6: Line 6:
Se citește numărul '''n'''.
Se citește numărul '''n'''.
== Date de ieșire ==  
== 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." dar daca n < 2 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.".
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 ==
== Restricţii şi precizări ==
Line 19: Line 19:
===Exemplul 2===
===Exemplul 2===
; Intrare
; Intrare
: 2
: 1
; Ieșire
; Ieșire
: Datele sunt corecte.
: Datele sunt corecte.
: Nu exista numere prime mai mici decat 2.
;Explicație
: Nu exista numere prime mai mici decat 1.
===Exemplul 3===
===Exemplul 3===
; Intrare
; Intrare
Line 48: Line 49:
      
      
          
          
def conform_restrictiilor():
def conform_restrictiilor(n):
    n = int(input())
     if n > 1000000 or n < 1:
     if n > 1000000 or n < 1:
         print("Datele nu sunt comform restricțiilor impuse.")
         print("Datele nu sunt comform restricțiilor impuse.")
         exit()
         return False
     print("Datele sunt corecte.")
     print("Datele sunt corecte.")
     return n
     return True




if __name__ == '__main__':
if __name__ == '__main__':
     n = conform_restrictiilor()
     n = int(input())
    ciur(n)
    if conform_restrictiilor(n) is True:
        ciur(n)


</syntaxhighlight>
</syntaxhighlight>


==Explicaţie cod==
==Explicaţie cod==
Citim valoarea lui n de la tastatură și o convertim într-un număr întreg utilizând funcția int().
Funcția '''conform_restrictiilor()''' primeste ca si parametru un numar intreg '''n''' și verifică dacă acesta respectă restricțiile impuse: trebuie să fie între '''1''' și '''1.000.000'''. Dacă datele sunt conforme, se afiseaza mesajul de confrimare si se returneaza True.
Verificăm dacă n este mai mic decât 2. Dacă da, afișăm un mesaj corespunzător și nu facem nimic altceva. Dacă nu, continuăm.
 
Inițializăm o listă goală pentru a stoca numerele prime.
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.
Parcurgem toate numerele de la 2 la n folosind o buclă for.
 
Verificăm dacă fiecare număr este prim folosind o altă buclă for. Pentru a verifica dacă un număr este prim, împărțim acest număr la toate numerele întregi de la 2 la radicalul său pătrat și verificăm dacă are vreun divizor întreg. Dacă găsim un divizor, înseamnă că numărul nu este prim și ieșim din bucla internă cu ajutorul instrucțiunii break. Dacă nu găsim niciun divizor, înseamnă că numărul este prim și îl adăugăm la lista de numere prime.
În secțiunea '''if __name__ == '__main__':''', se citeste mai întâi numarul '''n''' iar apoi se verifica daca funcția '''conform_restrictiilor(n)''' este conforma restricțiilor. Apoi, se apelează funcția '''ciur(n)''' pentru a determina și afișa toate numerele prime mai mici sau egale cu '''n'''.
La sfârșit, afișăm lista de numere prime utilizând operatorul de expansiune * pentru a transforma lista într-o serie de argumente separate prin spațiu în funcția print().

Latest revision as of 14:27, 30 April 2023

Sursa: - Ciurul Lui Eratosthenes


Cerinţa[edit | edit source]

Să se afișeze numerele prime de la 1 la n.

Date de intrare[edit | edit source]

Se citește numărul n.

Date de ieșire[edit | edit source]

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[edit | edit source]

  • 1 ≤ n ≤ 1.000.000

Exemple[edit | edit source]

Exemplul 1[edit | edit source]

Intrare
30
Ieșire
Datele sunt corecte.
2 3 5 7 11 13 17 19 23 29

Exemplul 2[edit | edit source]

Intrare
1
Ieșire
Datele sunt corecte.
Explicație
Nu exista numere prime mai mici decat 1.

Exemplul 3[edit | edit source]

Intrare
154242352352
Ieșire
Datele nu sunt comform restricțiilor impuse.


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line>

  1. 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):

   if n > 1000000 or n < 1:
       print("Datele nu sunt comform restricțiilor impuse.")
       return False
   print("Datele sunt corecte.")
   return True


if __name__ == '__main__':

   n = int(input())
   if conform_restrictiilor(n) is True:
       ciur(n)

</syntaxhighlight>

Explicaţie cod[edit | edit source]

Funcția conform_restrictiilor() primeste ca si parametru un numar intreg n și verifică dacă acesta respectă restricțiile impuse: trebuie să fie între 1 și 1.000.000. Dacă datele sunt conforme, se afiseaza mesajul de confrimare si se returneaza True.

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 citeste mai întâi numarul n iar apoi se verifica daca funcția conform_restrictiilor(n) este conforma restricțiilor. Apoi, se apelează funcția ciur(n) pentru a determina și afișa toate numerele prime mai mici sau egale cu n.