[SNIPPET+RETO] IsItPrime() - Comprobar si un numero es primo

Iniciado por Karcrack, 7 Julio 2010, 12:31 PM

0 Miembros y 4 Visitantes están viendo este tema.

e500

Cita de: cobein en  8 Julio 2010, 09:17 AM
Private Function CheckPrimality(ByVal lNum As Long) As Boolean
    Dim i       As Long
    Dim lSqr    As Long
       
    If lNum Mod 2 = 0 Then GoTo Composite:

    lSqr = Sqr(lNum)

    i = 3
    Do Until i > lSqr
        If lNum Mod i = 0 Then GoTo Composite:
        i = i + 2
    Loop
   
Prime:
    CheckPrimality = True
    Exit Function
Composite:
    If lNum = 2 Then CheckPrimality = True
End Function


Exelente COBEIN, este es más rápido

Saludos

Karcrack

#11
Muy bueno Cobein :) No habia pensando que podrian saltarse los pares :laugh: ;)

He optimizado el primero que puse:
Código (vb) [Seleccionar]
Public Function IsItPrime(ByVal lNumber As Long) As Boolean
    Dim i       As Long

    If (lNumber > 2) And (lNumber And 1) Or (lNumber = 2) Then
        For i = 3 To Sqr(lNumber) Step 2
            If (lNumber Mod i) = 0 Then GoTo Exit_
        Next i
        IsItPrime = True
    End If
Exit_:
End Function


Saludos :D

Psyke1

Una pregunta Karcrack, porque pones que vaya a la etiqueta Exit_ y no pones Exit Function??

Salu2!

Karcrack

Cita de: *PsYkE1* en  8 Julio 2010, 14:48 PM
Una pregunta Karcrack, porque pones que vaya a la etiqueta Exit_ y no pones Exit Function??

Salu2!
No lo habia pensado :laugh: , pero bueno, no interfiere en la velocidad, solo se llama una vez :P

raul338

Cita de: Karcrack en  8 Julio 2010, 14:53 PM
Cita de: *PsYkE1* en  8 Julio 2010, 14:48 PM
Una pregunta Karcrack, porque pones que vaya a la etiqueta Exit_ y no pones Exit Function??

Salu2!
No lo habia pensado :laugh: , pero bueno, no interfiere en la velocidad, solo se llama una vez :P

FAIL! :xD

Che la verdad muy bueno estos pequeños "concursos" de algoritmos que estan proponiendo ultimamente. Lastima que no sea muy bueno precisamente en algoritmos XD

Dreamaker

Mmm estaría bueno un topic lleno de ejercicios de algoritmos aportados por todos (no se si hay alguno ya), por ejemplo averiguar los primeros 100 números vampiros y cosas así, son muy buenas cosas para practicar programación, obviamente en VB :xD

PD: Deberían comprometerse todos a agregar ejercicios y sólo eso, las dudas en topics aparte

cbug

En la sección Ejercicios de programación existen muchos ejercicios, que se pueden resolver en cualquier lenguaje, ya que vb no es el único.

Karcrack

Cita de: cbug en  9 Julio 2010, 14:02 PM
En la sección Ejercicios de programación existen muchos ejercicios, que se pueden resolver en cualquier lenguaje, ya que vb no es el único.
:laugh: :laugh: :laugh: En serio? :o :o

Psyke1

Cita de: Karcrack en  9 Julio 2010, 14:17 PM
Cita de: cbug en  9 Julio 2010, 14:02 PM
En la sección Ejercicios de programación existen muchos ejercicios, que se pueden resolver en cualquier lenguaje, ya que vb no es el único.
:laugh: :laugh: :laugh: En serio? :o :o
jaaaaaaaaajajajja :laugh: :laugh:
A proposito, creo que se podria mejorar las funciones aun mas Karcrack, me explico:
Segun lo que hizo Cobein no comprobaba los numeros pares y eso ahorra trabajo, pero teniendo en cuenta que un numero primo solo puede acabar en:
1,3,7,9
Con la funciones que hay se comprobarian los imapares:
1,3,5,7,9
Pero todo numero que acabe en 5 es imposible que sea primo, me explico?
Corregidme si me equivoco... :P

Salu2!

cobein

*PsYkE1* suena correcto lo que decis, el problema, en mi opinion es que para no comparar algun numero terminado en 5, agregarias mas operaciones que simplemente comprobandolo.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.