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
![](http://www.valcon.it/python/wp-content/uploads/plt_numero_di_primi.png)
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 ()