Advertisement
barbos01

asd

Jun 1st, 2021
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. import sys
  3. import math
  4. import threading
  5. import time
  6.  
  7. def isPrime(number): # functie care verifica daca numarul este prim sau nu
  8.     if number > 1:
  9.         for i in range(2, number):
  10.             if (number % i) == 0:
  11.                 return False
  12.         else:
  13.             return True
  14.     else:
  15.         return False
  16.  
  17. def prob1(lista):
  18.     primeNum = [] # lista vida, in care o sa adaugam numerele prime
  19.     for element in lista: # preluam din lista, element cu elemet
  20.         time.sleep(1) # delay pentru a vedea care thread se termina mai repede
  21.         if(isPrime(element)): # verificam daca elementul este prim
  22.             primeNum.append(element) # daca da, il adaugam in lista
  23.     n = len(primeNum) # initializam pe n cu lungimea listei
  24.     if(n % 2 == 0): # daca lungimea listei este para, o sa avem 2 numere de mijloc, si va trebui sa facem media acestora
  25.         print((primeNum[n // 2] + primeNum[n // 2 + 1]) / 2, max(primeNum), primeNum) # afisam mediana si maximul
  26.     else:
  27.         print(primeNum[n // 2], max(primeNum), primeNum)
  28.    
  29.  
  30. def prob2(lista):
  31.     divizori = [1] # lista vida pentru divizori
  32.     for element in lista: # preluam din lista, element cu elemet
  33.         div = 2 # initializam un nou divizor pentru fiecare numar nou din lista
  34.         time.sleep(1.5) # delay pentru a vedea care thread se termina mai repede
  35.         while div <= element:
  36.             if element % div == 0: # daca numarul se imparte la divizor
  37.                 if div not in divizori: # si divizorul nu este in lista de divizori
  38.                     divizori.append(div) # il adaugam la lista
  39.             div += 1 # trecem la urmatorul divizor
  40.     n = len(divizori) # initializam pe n cu lungimea listei
  41.     if(n % 2 == 0): # daca lungimea listei este para, o sa avem 2 numere de mijloc, si va trebui sa facem media acestora
  42.        print((divizori[n // 2] + divizori[n // 2 + 1]) / 2, max(divizori), divizori) # afisam mediana si cel mai mare divizor
  43.     else: # daca lungimea listei este impara atunci o sa avem 1 singur numar care este mediana
  44.         print(divizori[n // 2], max(divizori), divizori)      
  45.  
  46.  
  47. if __name__ == "__main__":
  48.     lista = []
  49.     for i in range(1, len(sys.argv)): # adaugam in lista elemente preluate ca argumente
  50.         lista.append(int(sys.argv[i]))
  51.     t1 = threading.Thread(target=prob1, args= (lista, )) # realizam threading-urile pentru cele 2 functii
  52.     t2 = threading.Thread(target=prob2, args= (lista, ))
  53.     t1.start() # le executam
  54.     t2.start()
  55.     print("Is thread1 alive:", t1.is_alive()) # verificam daca thread-ul mai ruleaza
  56.     print("Is thread2 alive:", t2.is_alive())
  57.     t1.join() # dupa ce se termina de rulat, thread-ul se inchide
  58.     print("Is thread1 alive:", t1.is_alive())
  59.     print("Is thread2 alive:", t2.is_alive())
  60.     t2.join()
  61.     print("Is thread1 alive:", t1.is_alive())
  62.     print("Is thread2 alive:", t2.is_alive())
  63.     print("All done!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement