Nuestro grupo redactor ha pasado mucho tiempo buscando la resolución a tus búsquedas, te brindamos la solución y esperamos servirte de gran apoyo.
Solución:
Hay algunos problemas:
- ¿Por qué imprimiste el conteo cuando no se dividió por x? No significa que sea primo, solo significa que esta x en particular no la divide
continue
pasa a la siguiente iteración del bucle, pero realmente quiere detenerlo usandobreak
Aquí está su código con algunas correcciones, solo imprime números primos:
import math
def main():
count = 3
while True:
isprime = True
for x in range(2, int(math.sqrt(count) + 1)):
if count % x == 0:
isprime = False
break
if isprime:
print count
count += 1
Para una generación de primos mucho más eficiente, vea el tamiz de Eratóstenes, como han sugerido otros. Aquí hay una implementación agradable y optimizada con muchos comentarios:
# Sieve of Eratosthenes
# Code by David Eppstein, UC Irvine, 28 Feb 2002
# http://code.activestate.com/recipes/117119/
def gen_primes():
""" Generate an infinite sequence of prime numbers.
"""
# Maps composites to primes witnessing their compositeness.
# This is memory efficient, as the sieve is not "run forward"
# indefinitely, but only as long as required by the current
# number being tested.
#
D =
# The running integer that's checked for primeness
q = 2
while True:
if q not in D:
# q is a new prime.
# Yield it and mark its first multiple that isn't
# already marked in previous iterations
#
yield q
D[q * q] = [q]
else:
# q is composite. D[q] is the list of primes that
# divide it. Since we've reached q, we no longer
# need it in the map, but we'll mark the next
# multiples of its witnesses to prepare for larger
# numbers
#
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
Tenga en cuenta que devuelve un generador.
def is_prime(num):
"""Returns True if the number is prime
else False."""
if num == 0 or num == 1:
return False
for x in range(2, num):
if num % x == 0:
return False
else:
return True
>> filter(is_prime, range(1, 20))
[2, 3, 5, 7, 11, 13, 17, 19]
Obtendremos todos los números primos hasta el 20 en una lista. Podría haber usado Tamiz de Eratóstenes pero dijiste que querías algo muy simple. 😉
re es poderoso:
import re
def isprime(n):
return re.compile(r'^1?$|^(11+)1+$').match('1' * n) is None
print [x for x in range(100) if isprime(x)]
###########Output#############
[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]
valoraciones y reseñas
Recuerda difundir esta sección si te fue útil.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)