'''
Si definiscono divisori propri di un numero tutti i suoi divisori tranne l'uno e il numero stesso.
Scrivere una funzione modi(ls,k) che, presa una lista ls di interi  ed un intero
non negativo k:
    1) cancella  dalla lista ls gli interi che non hanno esattamente k divisori propri
    2) restituisce una seconda lista che contiene i soli numeri primi di ls.
NOTA: un numero maggiore di 1 e' primo se ha 0 divisori propri.

ad esempio per ls = [121, 4, 37, 441, 7, 16]
modi(ls,3) restituisce la lista con i numeri primi [37,7] mentre al termine della funzione si avra' che la lista ls=[16]

Per altri  esempi vedere il file grade.txt

ATTENZIONE: NON USATE LETTERE ACCENTATE.
ATTENZIONE: Se il grader non termina entro 30 secondi il punteggio dell'esercizio e' zero.
'''

def modi(ls,k):

    lista_for=ls[:]
    lista_n_primi=[]
    divisori=0

    for i in lista_for:
        divisori=numero_divisori(i)

        if divisori==0 and i!=0:
            lista_n_primi+=[i]

        if divisori!=k:
            ls.remove(i)

    return lista_n_primi


def numero_divisori(n):

    divisori_n=0
    indice=2

    while indice<sqrt(n)+1:
        if n%indice==0:
            divisori_n+=2
        indice+=1

    return divisori_n

from math import sqrt

46354620ebcbfeacee980d9cb14503eb69584491
<mask token>

<mask token>


def modi(ls, k):
    lista_for = ls[:]
    lista_n_primi = []
    divisori = 0
    for i in lista_for:
        divisori = numero_divisori(i)
        if divisori == 0 and i != 0:
            lista_n_primi += [i]
        if divisori != k:
            ls.remove(i)
    return lista_n_primi


<mask token>

<mask token>


def modi(ls, k):
    lista_for = ls[:]
    lista_n_primi = []
    divisori = 0
    for i in lista_for:
        divisori = numero_divisori(i)
        if divisori == 0 and i != 0:
            lista_n_primi += [i]
        if divisori != k:
            ls.remove(i)
    return lista_n_primi


def numero_divisori(n):
    divisori_n = 0
    indice = 2
    while indice < sqrt(n) + 1:
        if n % indice == 0:
            divisori_n += 2
        indice += 1
    return divisori_n


<mask token>

<mask token>


def modi(ls, k):
    lista_for = ls[:]
    lista_n_primi = []
    divisori = 0
    for i in lista_for:
        divisori = numero_divisori(i)
        if divisori == 0 and i != 0:
            lista_n_primi += [i]
        if divisori != k:
            ls.remove(i)
    return lista_n_primi


def numero_divisori(n):
    divisori_n = 0
    indice = 2
    while indice < sqrt(n) + 1:
        if n % indice == 0:
            divisori_n += 2
        indice += 1
    return divisori_n


from math import sqrt

'''
Si definiscono divisori propri di un numero tutti i suoi divisori tranne l'uno e il numero stesso.
Scrivere una funzione modi(ls,k) che, presa una lista ls di interi  ed un intero
non negativo k:
    1) cancella  dalla lista ls gli interi che non hanno esattamente k divisori propri
    2) restituisce una seconda lista che contiene i soli numeri primi di ls.
NOTA: un numero maggiore di 1 e' primo se ha 0 divisori propri.

ad esempio per ls = [121, 4, 37, 441, 7, 16]
modi(ls,3) restituisce la lista con i numeri primi [37,7] mentre al termine della funzione si avra' che la lista ls=[16]

Per altri  esempi vedere il file grade.txt

ATTENZIONE: NON USATE LETTERE ACCENTATE.
ATTENZIONE: Se il grader non termina entro 30 secondi il punteggio dell'esercizio e' zero.
'''

def modi(ls,k):

    lista_for=ls[:]
    lista_n_primi=[]
    divisori=0

    for i in lista_for:
        divisori=numero_divisori(i)

        if divisori==0 and i!=0:
            lista_n_primi+=[i]

        if divisori!=k:
            ls.remove(i)

    return lista_n_primi


def numero_divisori(n):

    divisori_n=0
    indice=2

    while indice<sqrt(n)+1:
        if n%indice==0:
            divisori_n+=2
        indice+=1

    return divisori_n

from math import sqrt
