Afficher les nombres premiers dans une plage spécifiée en Python
Les nombres premiers sont en nombre infini. À part 1 et eux-mêmes, ils ne sont divisibles par aucun autre diviseur.
L'exemple suivant peut afficher les nombres premiers dans une plage spécifiée :
Exemple (Python 3.0+)
Après l'exécution du programme ci-dessus, le résultat de sortie est :
$ python3 test.py 输入区间最小值: 1 输入区间最大值: 100 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
Utilisation de la division par essais
La division par essais est un algorithme de base qui effectue des tests de divisibilité sur chaque nombre pour déterminer s'il est premier. Voici le code qui utilise la division par essais pour afficher les nombres premiers dans une plage spécifiée :
Exemple
"""Déterminer si un nombre est un nombre premier"""
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
i = 5
while i * i <= n:
if n % i == 0 or n % (i + 2) == 0:
return False
i += 6
return True
def primes_in_range(start, end):
"""Afficher les nombres premiers dans la plage spécifiée"""
for num in range(start, end + 1):
if is_prime(num):
print(num)
# Exemple : afficher les nombres premiers dans la plage 10 à 50
primes_in_range(10, 50)
Utilisation du crible d'Ératosthène
Le crible d'Ératosthène est un algorithme plus efficace, particulièrement adapté pour trouver les nombres premiers dans une grande plage. Voici le code qui utilise le crible d'Ératosthène pour afficher les nombres premiers dans une plage spécifiée :
Exemple
"""Utiliser le crible d'Ératosthène pour trouver tous les nombres premiers jusqu'à max_num"""
sieve = [True] * (max_num + 1)
sieve[0] = sieve[1] = False # 0 et 1 ne sont pas des nombres premiers
p = 2
while p * p <= max_num:
if sieve[p]:
for multiple in range(p * p, max_num + 1, p):
sieve[multiple] = False
p += 1
return [p for p, is_prime in enumerate(sieve) if is_prime]
def primes_in_range(start, end):
"""Afficher les nombres premiers dans la plage spécifiée"""
primes = sieve_of_eratosthenes(end)
for num in primes:
if num >= start:
print(num)
# Exemple : afficher les nombres premiers dans la plage 10 à 50
primes_in_range(10, 50)
Autres extensions
Exemples Python3