Advertisement
Guest User

program01

a guest
Oct 19th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.54 KB | None | 0 0
  1. '''
  2. Si definiscono divisori propri di un numero tutti i suoi divisori tranne l'uno e il numero stesso.
  3. Scrivere una funzione modi(ls,k) che, presa una lista ls di interi  ed un intero
  4. non negativo k:
  5.    1) cancella  dalla lista ls gli interi che non hanno esattamente k divisori propri
  6.    2) restituisce una seconda lista che contiene i soli numeri primi di ls.
  7. NOTA: un numero maggiore di 1 e' primo se ha 0 divisori propri.
  8.  
  9. ad esempio per ls = [121, 4, 37, 441, 7, 16]
  10. modi(ls,3) restituisce la lista con i numeri primi [37,7] mentre al termine della funzione si
  11. avra' che la lista ls=[16]
  12.  
  13. Per altri  esempi vedere il file grade.txt
  14.  
  15. ATTENZIONE: NON USATE LETTERE ACCENTATE.
  16. ATTENZIONE: Se il grader non termina entro 30 secondi il punteggio dell'esercizio e' zero.
  17. '''
  18. import math,time
  19.  
  20. def modi(ls,k):
  21.     tempo_iniziale = time.time()
  22.     ls_primi=[]
  23.     for i in ls[:]:
  24.         dp=0
  25.         j=2
  26.         flag=False
  27.         while(j<= math.ceil(math.sqrt(i)) and flag==False):
  28.             if(i%j==0):
  29.                 val_limite= math.ceil(i/j+1);
  30.                 val=j+1
  31.                 dp=dp+1
  32.                 flag=True
  33.             j=j+1
  34.        
  35.         if dp==0:
  36.             ls_primi.append(i)      
  37.         else:
  38.             for j in range(val, val_limite):
  39.                 if i%j == 0:
  40.                     dp = dp +1
  41.        
  42.         if dp != k:
  43.             ls.remove(i)
  44.            
  45.     tempo_finale = time.time()
  46.     print ("Impiegati", str(tempo_finale - tempo_iniziale), "secondi.")
  47.        
  48.     return ls_primi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement