[Python] - ¿Es primo?

Iniciado por Meta, 1 Diciembre 2010, 04:27 AM

0 Miembros y 1 Visitante están viendo este tema.

Meta

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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

#1
Código (python) [Seleccionar]
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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Ricardo95

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'

Shell Root

Quizás podría hacerlo así, -aun no manejo mucho python, pero así medio aprendo-
Código (python) [Seleccionar]
#!/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
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Dnk!

#4
Pienso que asi queda mejor, haganme saber recien empiezo en python  :-*

Código (python) [Seleccionar]

#!/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!




Comentar es agradecer.
Visita Mi Blob

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Dnk!

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.




Comentar es agradecer.
Visita Mi Blob

pucheto

Código (python) [Seleccionar]

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

Karcrack

#8
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 :)
Código (python) [Seleccionar]
## 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:
Código (python) [Seleccionar]
n = input("Dame n:")
print (GetPrimes(n).count(n)==1)


[L]ord [R]NA

:xD publique esa Criba en un problema que puso Novlucker en la zona de ejercicios.