elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Funcion isprime() [Python]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funcion isprime() [Python]  (Leído 5,533 veces)
isseu


Desconectado Desconectado

Mensajes: 325


°º¤ø,¸¸,El conocimiento es poder°º¤ø,¸¸,ø¤º°`°º¤ø,


Ver Perfil WWW
Funcion isprime() [Python]
« en: 5 Junio 2009, 02:14 am »

Aprendiendo Python y tratando de descubrir alguna forma por mi solo para sacar comprobar si un numero es primo cree esta funcion que compare con otras que aparecen en la red y puedo decir que es mas rapida y gasta menos recursos que las demas
Sacar Primeros 100 digitos Primos:

Código
  1. #/usr/bin/env phyton
  2. import math
  3.  
  4. def isprime(a):
  5. d = True
  6. if a==0 or a==1:
  7.  d=False
  8. b = 2
  9. c = math.sqrt(a)
  10. while b <= c and d == True:
  11.  if a%b==0:
  12.   d = False
  13.  b+=1
  14. return d
  15.  
  16. a=1
  17. while(a<100):
  18. if(isprime(a)==True):
  19.  print str(a)
  20. a+=2


« Última modificación: 5 Junio 2009, 03:19 am por isseu » En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Funcion isprime() [Python]
« Respuesta #1 en: 5 Junio 2009, 03:14 am »

Pone a+=2 en vez de a+=1.. los primos nunca van a ser pares...
De todas formas la diferencia es nula, apenas cambia en 0.001 el tiempo


« Última modificación: 5 Junio 2009, 03:16 am por pucheto » En línea

isseu


Desconectado Desconectado

Mensajes: 325


°º¤ø,¸¸,El conocimiento es poder°º¤ø,¸¸,ø¤º°`°º¤ø,


Ver Perfil WWW
Re: Funcion isprime() [Python]
« Respuesta #2 en: 5 Junio 2009, 03:18 am »

cualquier milesima vale
muy buena idea
En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Funcion isprime() [Python]
« Respuesta #3 en: 5 Junio 2009, 03:50 am »

Estaba al pedo y me tente :P
Código
  1. import math
  2. import time
  3.  
  4. def isprime(a):        #verifica si a es primo
  5.    d = True
  6.    if a==0 or a==1:
  7.        d=False
  8.    b = 2
  9.    c = math.sqrt(a)
  10.    while b <= c and d == True:
  11.        if a%b==0:
  12.            d = False
  13.        b+=1
  14.    return d
  15.  
  16.  
  17. def loop():            #mientras el tiempo transcurridosea menor q 5 busca primos
  18.    a=1
  19.    count = 0
  20.    now = 0
  21.    start = time.time()
  22.  
  23.    while((now-start)<5):
  24.        if(isprime(a)==True):
  25.            count += 1
  26.        now = time.time()
  27.        a+=2
  28.    return count
  29.  
  30. def main():            #Llama 3 veces a loop() y hace un promedio de los resultados
  31.    runs = 3
  32.    s = 0
  33.    for i in range(0,runs):
  34.        s += loop()
  35.        print "Run",i+1
  36.    s = s/runs
  37.    print "Score: ",s
  38.  
  39. print "Cerra todos los programas q tengas abiertos..."
  40. raw_input("Despues presiona cualquier tecla...")
  41. main()
  42.  
  43.  

39210 primos en 5 segundos! (CPython 2.6)
Haber q resultados les da a los demas..
En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Funcion isprime() [Python]
« Respuesta #4 en: 5 Junio 2009, 03:56 am »

43752 primos en 5 seg si uso IronPython... curioso este ultimo... (el iron python hace alguna optimizacion just in time?)
En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Funcion isprime() [Python]
« Respuesta #5 en: 5 Junio 2009, 04:01 am »

Mmm

aver te dejo esta función para que la compares, es c++ pero puedes adaptarla ya que no se python...

Código
  1. bool EsPrimo(int x)
  2. {
  3.      int PD=2;
  4.      while((PD <= X/2)&&(X%PD!= 0)//*
  5.      {
  6.            PD++;
  7.      }
  8.      if((PD > X/2)&&(X!=1)){return 1;}//*
  9. }

*X/2 tiene que ser división ENTERA.
« Última modificación: 5 Junio 2009, 04:20 am por Emt.dev » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Funcion isprime() [Python]
« Respuesta #6 en: 5 Junio 2009, 04:20 am »

Al parecer leyendo algo de código, el mio quedaría algo asi:

Código
  1. def EsPrimo(x):
  2.     e=FALSE
  3.     PD=2
  4.     while PD<=x//2 and  x%PD!=0:
  5.          PD=PD+1
  6.     if PD>x//2 and x!=1:
  7.          e=TRUE
  8.     return e
En línea

pucheto

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Funcion isprime() [Python]
« Respuesta #7 en: 5 Junio 2009, 04:27 am »

no pongas PD<=(x/2)... combiene mas usar PD <= math.sqrt(x)
Los números compuestos son divisibles por algún primo menor q su raiz cuadrada.

Para no calcular la raiz tantas veces podes almacenarla en una variable auxiliar.
En línea

isseu


Desconectado Desconectado

Mensajes: 325


°º¤ø,¸¸,El conocimiento es poder°º¤ø,¸¸,ø¤º°`°º¤ø,


Ver Perfil WWW
Re: Funcion isprime() [Python]
« Respuesta #8 en: 6 Junio 2009, 15:46 pm »

muy bueno el code pucheto, estaba aprendiendo Python y no encontraba mucha info sobre lo de Time,
¿SOLO 17818? (con programas abiertos)
En línea

link87

Desconectado Desconectado

Mensajes: 21



Ver Perfil
Re: Funcion isprime() [Python]
« Respuesta #9 en: 12 Junio 2009, 13:49 pm »

mi versión:
Código:
import time, math

def calcularPrimos(tiempo):
    primos = [2]
    start = now = time.time()
    n = 3
    while (now-start) < tiempo :
        es_primo = True
        raiz = math.sqrt(n)
        for p in primos:
            if p > raiz :
                break
            if (n % p) == 0 :
                es_primo = False
                break
        if es_primo:
            primos.append(n)
        now = time.time()
        n += 2
    return primos

pr = calcularPrimos(5) #calculamos primos durante 5 segundos
print len(pr)

89684 primos en 5 segundos. En linux con firefox abierto.

Edit: por cierto, como se hace para que sombree la sintaxis
« Última modificación: 12 Junio 2009, 13:51 pm por link87 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python] - función recursividad
Scripting
Meta 0 4,394 Último mensaje 20 Diciembre 2010, 14:40 pm
por Meta
Verificar argumentos de función[Python]
Scripting
S3kh 3 3,391 Último mensaje 20 Septiembre 2011, 02:26 am
por Novlucker
[SRC] isPrime « 1 2 »
Java
Psyke1 12 5,469 Último mensaje 24 Noviembre 2011, 04:13 am
por BlackZeroX
Ayuda, python, función.
Scripting
Anonymatrix 2 2,219 Último mensaje 7 Enero 2014, 18:04 pm
por Anonymatrix
Función en Python
Scripting
Br1ant 7 3,664 Último mensaje 3 Marzo 2015, 02:11 am
por Br1ant
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines