- Code: Tout sélectionner
# Calcul de la liste des nombres premiers de 2 à un nombre donné
from math import sqrt
def prem( n ) : # teste la primalité de n
stop = int( sqrt( 1.*n ))
a = True # vrai si n est premier
i = 1 # n° dans la liste - on commence à liste[1] = 3
p = 3 # premier diviseur premier potentiel à tester
while (a & (p <= stop)) :
if ( n%p == 0 ) :
a = False # on a trouvé un diviseur premier
i += 1
p = liste[ i ] # diviseur premier potentiel suivant
return a
print('N = ', end='')
nfin = int( input() )
liste = [2] # initialisation de la liste des nombres premiers
k = 3 # on va parcourir de 3 à nfin
while (k <= nfin) :
if prem( k ) :
liste.append( k )
k += 2
print('Liste des nombres premiers :', liste)
Remarques :
- j'ai utilisé une liste, bien adaptée au problème puisqu'on construit pas à pas la liste des nombres premiers ;
- ainsi qu'une fonction pour tester la primalité ;
- laquelle renvoie un booléen, d'où le test « if prem( k ) » ;
- la liste des nombres premiers est une variable globale et peut donc être utilisée dans la fonction, ainsi le test de primalité utilise les nombres premiers précédemment trouvés (on ne perd pas de temps à tester des diviseurs non-premiers).