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]))
         0        169
         1        135
         2        127
         3        120
         4        119
         5        114
         6        117
         7        107
         8        110
         9        112

Visualizza

  • i numeri primi separati in blocchi per ogni intervallo
  • la tabella riepilogativa con i conteggi
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

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

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()

for i in range(10):
    print("%4i - %5i : %3i" 
          %(minimo[i],massimo[i],quanti[i]))
2 3 5 7 ... 997 

1009 1013 1019 1021 ... 1999 

2003 2011 2017 2027 ... 2999 

3001 3011 3019 3023 ... 3989 

4001 4003 4007 4013 ... 4999 

5003 5009 5011 5021 ... 5987 

6007 6011 6029 6037 ... 6997 

7001 7013 7019 7027 ... 7993 

8009 8011 8017 8039 ... 8999 

9001 9007 9011 9013 ... 9973 

   2 -  1000 : 168
1001 -  2000 : 135
2001 -  3000 : 127
3001 -  4000 : 120
4001 -  5000 : 119
5001 -  6000 : 114
6001 -  7000 : 117
7001 -  8000 : 107
8001 -  9000 : 110
9001 - 10000 : 112
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 ()