Conteggi dei numeri primi

Maturità scientifica sperimentale – Indirizzo matematico-informatico – 1990

Si scriva un programma che produca i numeri primi inferiori a 100.000.

Si calcoli quanti sono i numeri primi che cadono in ciascuno dei seguenti intervalli

  • 1 – 1.000
  • 1.001 – 2.000
  • 2.001 – 3.000
  • 99.001 – 100.000.

Visualizza quanti primi per ogni intervallo

import math # sqrt()

def primo(x):
    if(x   == 2): return True
    if(x%2 == 0): return False
    ultimo=int(math.sqrt(x))
    for i in range(3, ultimo+1,2):
        if(x%i == 0):
            return False
    return True

quanti=10*[0]
n=1
for intervallo in range(10):
    for dimensione in range(1000):
        if(primo(n)):
            quanti[intervallo]+=1
        n+=1

for intervallo in range(10):
    print("%10i %10i" %(intervallo, quanti[intervallo]))

Visualizza

  • i numeri primi separati in blocchi per ogni intervallo
  • la tabella riepilogativa con i conteggi
import math # sqrt()
################################### Primo?
def primo(x):
    if(x   == 2): return True
    if(x%2 == 0): return False
    ultimo=int(math.sqrt(x))
    for i in range(3, ultimo+1,2):
        if(x%i == 0):
            return False
    return True
########################## Inizializza
minimo =10*[0]
massimo=10*[0]
quanti =10*[0]
for i in range(10):
    minimo[i] =1000*i+1
    massimo[i]=1000*(i+1)
minimo[0]=2
############################################ Visualizza i blocchi
for i in range(10):
    for n in range(minimo[i], massimo[i]+1):
        if(primo(n)):
            quanti[i] +=1
            print(n, end=' ')
    print()
    print()
############################################################## Visualizza la tabella
for i in range(10):
   print("%4i - %5i : %3i" %(minimo[i],massimo[i],quanti[i]))

matplotlib


import matplotlib.pyplot as plt
import math

def primo(x):
    if(x   == 2): return True
    if(x%2 == 0): return False
    ultimo=int(math.sqrt(x))
    for i in range(3, ultimo+1,2):
        if(x%i == 0):
            return False
    return True

minimo =10*[0]
massimo=10*[0]
quanti =10*[0]
N=range(10)
for i in N:
    minimo[i] =1000*i+1
    massimo[i]=1000*(i+1)
minimo[0]=2

for i in N:
    for n in range(minimo[i], massimo[i]+1):
        if(primo(n)):
            quanti[i] +=1

plt.bar  (N, quanti)
plt.title("Numero di primi")
plt.show ()