Buenas:
Por unos días que no he tenido tiempo estar en el ordenador por el temporal que me fastidió Internet y el Windows porque se me apagó de repente, vuelvo a por el Python.
Ejercicio:
CitarDiseña una función es_primo que determine si un número es primo (devolviendo True) o no (devolviendo False). Diseña a continuación un procedimiento muestra_primos que reciba un número y muestre por pantalla todos los números primos entre 1 y dicho número.
- Aquí función.
- introducir un número.
- ¿El número es primo?
Verdadero.
- entonces.
Falso.
Saludo.
for x in [x for x in range(2,input('Valor maximo: '))if all(x%i for i in range(2,x))]:
print x
Ahora quiero ver tu solución, que como sabrás, esto no es lo que pide el ejercicio exactamente
¿Te has planteado releer el libro con el que estas aprendiendo Python? Porque tengo la ligera sospecha de que aún no has aprendido nada :silbar:
Saludos
Yo lo haria usando los operadores logicos true y false.(Tambien es cierto que es como aprendi en la guia que estoy siguiendo)
#!/usr/bin/env python
n=int(raw_input("Dime un numero")
puede_primo = True
for divisor in range(2, n):
if n % divisor == 0:
puede_primo = False
if puede_primo:
print 'El numero', n, 'es primo'
else:
print 'El numero', n, 'no es primo'
Quizás podría hacerlo así, -aun no manejo mucho python, pero así medio aprendo-
#!/usr/bin/python
def primeNumber(sNumber):
sCount = 2
sState = "true"
while ( (sState == "true") and ( sCount != sNumber ) ):
if( ( sNumber % sCount ) == 0 ):
sState = "false";
sCount +=1
return sState
Pienso que asi queda mejor, haganme saber recien empiezo en python :-*
#!/usr/bin/python
def esPrimo(num):
if num < 2: return False
for i in range(2,num):
if (num%i==0):
return False
return True
xDnk!
Dnk!, en realidad el 2 también es primo :silbar:
Por otra parte, esos métodos (incluído el mio que imprime los primos entre 1 y n) efectivamente son válidos, pero no del todo eficientes :P
Saludos
CitarDnk!, en realidad el 2 también es primo
Ups, pensaba que no. Ajam es verdad, esa parte me la he saltado, todo por las prisas xD.
import math
def esPrimo_n(n,prims):
sq = math.sqrt(n)
for i in prims:
if i > sq: return True
if n%i == 0: return False
return True
def esPrimo(n):
prims = [2]
for i in xrange(3,n+1,2):
if esPrimo_n(i,prims):
prims += [i]
return prims[len(prims)-1]==n
Ya que sale la pregunta, y a mi me encantan los numeros primos aqui esta la forma mas rapida de mostrar la cantidad de primos hasta n :)
## coding: utf-8
## Criba de Eratóstenes
def GetPrimes(n):
# Obtenemos el lado de la criba
nroot = int(n**0.5)
# Marcamos todos los numeros como primos
sieve = [True]*(n+1)
# El 0 y el 1 no son primos
sieve[0] = False
sieve[1] = False
# Recorremos todos los números de 2 hasta la raíz
for i in xrange(2, nroot+1):
# Si esta marcado como primo...
if sieve[i]:
# Obtenemos la cantidad de multiplos en el rango
m = n/i - i
# Marcamos todos sus multiplos como NO primos
sieve[i*i: n+1:i] = [False] * (m+1)
# Devolvemos solo los primos del rango
return [i for i in xrange(n+1) if sieve[i]]
print GetPrimes(input("Dame n:"))
Para saber si n es primo seria asi:
n = input("Dame n:")
print (GetPrimes(n).count(n)==1)
:xD publique esa Criba en un problema que puso Novlucker en la zona de ejercicios.