# Programma "densità numeri primi"  di Martina De Santis"

# Il programma chiede all'utente di scegliere un range di interi positivi (n1,n2) e  un intervallo i.
# Per ogni intervallo (n1, n1+i), (n1+i, n1+2i)  ..... (n1+ki,n2) il programma calcola la percentuale
# di numeri primi.

########### MODULI E FUNZIONI ##########

# "import time" permette di riportare il tempo impiegato dal programma nell'eseguire quanto richiesto.
import time

# La funzione "primalità(a)" verifica che a sia un numero primo cercando suoi eventuali divisori
# nel range compreso fra 2 e a. Se i divisori esistono, l'output della funzione sarà "False".
# Se invece a è un numero primo, la funzione riporterà "True"
def primalità(a):
    primo=True
    if(a==1):
        primo=False
        # il numero 1 è escluso dai numeri primi a priori
    for b in range(2,a):
        if(a%b==0):
            primo=False
            break
    if(primo==True):
        return(True)
    else:
        return(False)

    
###########       MAIN         ##########
print("DENSITA' DEI NUMERI PRIMI")
# A partire dal range i cui estremi sono n1 e n2, si cercheranno la quantità e la densità dei numeri primi
# entro intervalli regolari di lunghezza i.
n1=int(input("Inserisci un numero naturale n1: "))
n2=int(input("Inserisci un numero altro naturale n2: "))
i=int(input("Inserisci un intervallo i: "))

inizio=time.time()

# Nel caso in cui, in input, sia stato associato ad n2 un numero minore di n1, si invertono i valori delle
# due variabili.
if (n2<n1):
    variabile=n1
    n1=n2
    n2=variabile

for x in range(n1,n2,i):
    # grazie all'aggiunta del terzo parametro nella definizione del range, il programma fornirà un output per ogni
    # intervallo di lunghezza i, compreso tra n1 e n2.
    c=0
    for y in range(x,x+i-1):
        if(primalità(y)==True):
            c=c+1
            # il valore della variabile c aumenterà di una unità per ogni numero primo individuato nell'intervallo
            # in esame.            
    print("numeri primi nell'intervallo:",c)
    t=(c*100)/i
    print("densità numeri primi:",t,"%")
    
fine=time.time()
durata=fine-inizio
print("tempo impiegato:",durata)


