Sunteți pe pagina 1din 5

Ministerul Educaţiei

al Republicii Moldova

Universitatea Tehnică a Moldovei

RAPORT
despre lucrarea de laborator Nr. 2
la Analiza și Proiectarea Algoritmilor în Python

A îndeplinit: Spac Antonio

A verificat: Buldumac Oleg

Chişinău – 2021

Tema: Ciurul lui Eratostente. Analiza algoritmilor.


Scopul lucrării: 1. Analiza empirică a algoritmilor
1. Implementați 3 algoritmi ce rezolva ciurul lui Eratostene intr-un limbaj de programare.
2. Stabiliți proprietăţile datelor de intrare în raport cu care se face analiza 3
3. Alegeți metrica pentru compararea algoritmilor
4. Efectuaţi analiza empirică a algoritmilor propuşi
5. Faceți o prezentare grafică a datelor obținute
6. Faceţi o concluzie asupra lucrării efectuate.
Algoritmul 1

import time
start = time.time()
lower = int(input("Introduceti limita inferioara: "))
upper = int(input("Introduceti limita superioara: "))

for num in range(lower, upper + 1):


if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
print(num)

end= time.time()
print(f"Timpul de executie a programului este de:{(end - start)/1000}")
Rezultatele calcularii pentru limita 100
Timpul de executie: 0.0050
Rezultatele calcularii pentru elementul 200
Timpul de executie: 0.0044
Rezultatele calcularii pentru elementul 300
Timpul de executie: 0.0029

Algoritmul 2
import time
start = time.time()

import math
print (2)
for num in range(3,300,2):
if all(num%i!=0 for i in range(3,int(math.sqrt(num))+1, 2)):
print (num)
end = time.time()
print(f"Timpul de executie a programului este de:{(end - start) / 1000}")

Rezultatele calcularii pentru elementul 100


Timpul de executie:0.00
Rezultatele calculării pentru elementul 200
Timpul de execuție: 0,00
Rezultatele calcularii pentru elementul 300
Timpul de execuție: 0.00
Algoritmul 3
import time
start = time.time()

def CiurulluiEratostene(n):

prime = [True for i in range(n + 1)]


p = 2
while (p * p <= n):

# Daca prime[p] nu este schimbat,atunci e nr prim


if (prime[p] == True):

# Actualizarea tuturor multiplilor lui p


for i in range(p * 2, n + 1, p):
prime[i] = False
p += 1
prime[0] = False
prime[1] = False
# Afisarea tuturor numerelor prime
for p in range(n + 1):
if prime[p]:
print(p),

if __name__ == '__main__':
n = 25

print("Numerele prime pina la elementul n",)

print("ori egale cu elementul n",)

CiurulluiEratostene(n)
end = time.time()
print(f"Timpul de executie a programului este de:{(end - start) / 1000}")

Rezultatele calcularii pentru elementul 100:


Timpul de execuție: 0.0
Rezultatele calcularii pentru elementul 200
Timpul de execuție: 0.0
Rezultatele calcularii pentru elementul 300
Timpul de execuție 0.0
Concluzie:
Datele rezultate arata ca algoritmul unu pierde semnificativ în viteza fata ce celelalte doua.
Această metodă de aflare a numarului n din Ciurul lui Erastotene este foarte ineficienta. Nu
se recomanda de utilizat nici datorită structurii simple, care poate fi rapid codificata și
depanata. Algoritmul al doilea si al treilea s-a dovedit a fi cel mai rapid, fapt care îi face o
optiune perfectă pentru cazurile în care programul urmează a fi rulat de un numar mare de
ori, se cere de prelucrat un numar mare de date sau unde este importanta viteza.

S-ar putea să vă placă și