Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import sys
- import math
- import threading
- import time
- def isPrime(number): # functie care verifica daca numarul este prim sau nu
- if number > 1:
- for i in range(2, number):
- if (number % i) == 0:
- return False
- else:
- return True
- else:
- return False
- def prob1(lista):
- primeNum = [] # lista vida, in care o sa adaugam numerele prime
- for element in lista: # preluam din lista, element cu elemet
- time.sleep(1) # delay pentru a vedea care thread se termina mai repede
- if(isPrime(element)): # verificam daca elementul este prim
- primeNum.append(element) # daca da, il adaugam in lista
- n = len(primeNum) # initializam pe n cu lungimea listei
- if(n % 2 == 0): # daca lungimea listei este para, o sa avem 2 numere de mijloc, si va trebui sa facem media acestora
- print((primeNum[n // 2] + primeNum[n // 2 + 1]) / 2, max(primeNum), primeNum) # afisam mediana si maximul
- else:
- print(primeNum[n // 2], max(primeNum), primeNum)
- def prob2(lista):
- divizori = [1] # lista vida pentru divizori
- for element in lista: # preluam din lista, element cu elemet
- div = 2 # initializam un nou divizor pentru fiecare numar nou din lista
- time.sleep(1.5) # delay pentru a vedea care thread se termina mai repede
- while div <= element:
- if element % div == 0: # daca numarul se imparte la divizor
- if div not in divizori: # si divizorul nu este in lista de divizori
- divizori.append(div) # il adaugam la lista
- div += 1 # trecem la urmatorul divizor
- n = len(divizori) # initializam pe n cu lungimea listei
- if(n % 2 == 0): # daca lungimea listei este para, o sa avem 2 numere de mijloc, si va trebui sa facem media acestora
- print((divizori[n // 2] + divizori[n // 2 + 1]) / 2, max(divizori), divizori) # afisam mediana si cel mai mare divizor
- else: # daca lungimea listei este impara atunci o sa avem 1 singur numar care este mediana
- print(divizori[n // 2], max(divizori), divizori)
- if __name__ == "__main__":
- lista = []
- for i in range(1, len(sys.argv)): # adaugam in lista elemente preluate ca argumente
- lista.append(int(sys.argv[i]))
- t1 = threading.Thread(target=prob1, args= (lista, )) # realizam threading-urile pentru cele 2 functii
- t2 = threading.Thread(target=prob2, args= (lista, ))
- t1.start() # le executam
- t2.start()
- print("Is thread1 alive:", t1.is_alive()) # verificam daca thread-ul mai ruleaza
- print("Is thread2 alive:", t2.is_alive())
- t1.join() # dupa ce se termina de rulat, thread-ul se inchide
- print("Is thread1 alive:", t1.is_alive())
- print("Is thread2 alive:", t2.is_alive())
- t2.join()
- print("Is thread1 alive:", t1.is_alive())
- print("Is thread2 alive:", t2.is_alive())
- print("All done!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement