Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 1 Diciembre 2010, 04:27 am



Título: [Python] - ¿Es primo?
Publicado por: Meta en 1 Diciembre 2010, 04:27 am
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:
Citar
Diseñ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.


Título: Re: [Python] - ¿Es primo?
Publicado por: Novlucker en 1 Diciembre 2010, 12:42 pm
Código
  1. for x in [x for x in range(2,input('Valor maximo: '))if all(x%i for i in range(2,x))]:
  2.    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


Título: Re: [Python] - ¿Es primo?
Publicado por: Ricardo95 en 1 Diciembre 2010, 19:37 pm
Yo lo haria usando los operadores logicos true y false.(Tambien es cierto que es como aprendi en la guia que estoy siguiendo)


Código:
#!/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’


Título: Re: [Python] - ¿Es primo?
Publicado por: Shell Root en 1 Diciembre 2010, 22:05 pm
Quizás podría hacerlo así, -aun no manejo mucho python, pero así medio aprendo-
Código
  1. #!/usr/bin/python
  2.  
  3. def primeNumber(sNumber):
  4.  sCount = 2
  5.  sState = "true"
  6.  
  7.  while ( (sState == "true") and ( sCount != sNumber ) ):
  8.    if( ( sNumber % sCount )  == 0 ):
  9.      sState = "false";
  10.    sCount +=1
  11.  
  12.  return sState


Título: Re: [Python] - ¿Es primo?
Publicado por: Dnk! en 1 Diciembre 2010, 22:32 pm
Pienso que asi queda mejor, haganme saber recien empiezo en python  :-*

Código
  1. #!/usr/bin/python
  2.  
  3. def esPrimo(num):
  4.    if num < 2: return False
  5.    for i in range(2,num):
  6.        if (num%i==0):
  7.            return False
  8.    return True
  9.  

xDnk!


Título: Re: [Python] - ¿Es primo?
Publicado por: Novlucker en 1 Diciembre 2010, 22:51 pm
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


Título: Re: [Python] - ¿Es primo?
Publicado por: Dnk! en 1 Diciembre 2010, 23:26 pm
Citar
Dnk!, 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.


Título: Re: [Python] - ¿Es primo?
Publicado por: pucheto en 2 Diciembre 2010, 03:05 am
Código
  1. import math
  2.  
  3. def esPrimo_n(n,prims):
  4. sq = math.sqrt(n)
  5. for i in prims:
  6. if i > sq: return True
  7. if n%i == 0: return False
  8. return True
  9.  
  10. def esPrimo(n):
  11. prims = [2]
  12. for i in xrange(3,n+1,2):
  13. if esPrimo_n(i,prims):
  14. prims += [i]
  15. return prims[len(prims)-1]==n
  16.  


Título: Re: [Python] - ¿Es primo?
Publicado por: Karcrack en 4 Diciembre 2010, 14:07 pm
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
  1. ## coding: utf-8
  2. ## Criba de Eratóstenes
  3.  
  4. def GetPrimes(n):
  5. # Obtenemos el lado de la criba
  6. nroot = int(n**0.5)
  7. # Marcamos todos los numeros como primos
  8. sieve = [True]*(n+1)
  9. # El 0 y el 1 no son primos
  10. sieve[0] = False
  11. sieve[1] = False
  12.  
  13. # Recorremos todos los números de 2 hasta la raíz
  14. for i in xrange(2, nroot+1):
  15. # Si esta marcado como primo...
  16. if sieve[i]:
  17. # Obtenemos la cantidad de multiplos en el rango
  18. m = n/i - i
  19. # Marcamos todos sus multiplos como NO primos
  20. sieve[i*i: n+1:i] = [False] * (m+1)
  21. # Devolvemos solo los primos del rango
  22. return [i for i in xrange(n+1) if sieve[i]]
  23.  
  24. print GetPrimes(input("Dame n:"))

Para saber si n es primo seria asi:
Código
  1. n = input("Dame n:")
  2. print (GetPrimes(n).count(n)==1)


Título: Re: [Python] - ¿Es primo?
Publicado por: [L]ord [R]NA en 6 Diciembre 2010, 06:56 am
:xD publique esa Criba en un problema que puso Novlucker en la zona de ejercicios.