[RETO] Comprobar si un numero es Oblongo/Pronico

Iniciado por Karcrack, 17 Agosto 2010, 01:23 AM

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

BlackZeroX

#40
lastima que te salgas del hilo de vb6... las operaciones las realizas en ASM asi que para mi solo el vb6 es tu plataforma de arranque.

P.D.: tardo  Karcrack -> 1,267 msec, aun es lenta!¡.

Ducles Lunas!¡.
The Dark Shadow is my passion.

Karcrack

Todo el codigo de VB6 se ensambla, porque no puedo añadir yo un par de instrucciones? :rolleyes: :xD

Bueno, si no quereis que no valga usar ASM... pero a ver quien hace mas rapido el codigo entonces :silbar: :xD

BlackZeroX

#42
a por cierto lo de

n = Sqr(nval)

es solo que nosotros tomamos el valor entero de la raiz, aun que lo "Algebra" esta bien, pero si sabemos que long no va a aceptar los decimales pero si el entero... pues mejor no matamos unas neuronas xP.

al fin y al cabo no hay errores

Código (Vb) [Seleccionar]

Option Explicit

Dim cT      As New CTiming



Private Sub Form_Load()
Dim i   As Long
Dim n(1)   As Long
Const lim& = 20000
Dim aaa As New Class1


       cT.Reset
       For i = 0 To lim&
           Call IsOblongoAlgebra(i, 0)
       Next i
       InputBox "", "", "Karcrack -> " & cT.sElapsed & vbCrLf
       MsgBox "Comprovando Coherencias!¡."
       For i = 0 To lim&
           If IsOblongoAlgebra(i, n(0)) And IsOblongoTokes03(i, n(1)) And True Then
               If n(0) <> n(1) Then MsgBox "Error n=" & n(1) & " el real era n=" & n(0) & " del numero " & i & vbCrLf
           End If
       Next i

   MsgBox "Fin"
   End
End Sub

Private Function IsOblongoAlgebra(ByVal nval As Long, ByRef n As Long) As Boolean
   If (nval And 1) Or (nval And &H80000000) Then Exit Function

   n = (Sqr(1 + nval * 4) - 1) / 2
   
   IsOblongoAlgebra = (n * n + n = nval)
End Function

'  Tokes 03
Private Function IsOblongoTokes03(ByVal nval As Long, ByRef n As Long) As Boolean
   If (nval And 1) Or (nval And &H80000000) Then Exit Function
   n = Sqr(nval)
   IsOblongoTokes03 = n * n + n = nval
End Function


Dulces Lunas!¡.
The Dark Shadow is my passion.

Karcrack

Cita de: BlackZeroX en 17 Agosto 2010, 23:49 PM
a por cierto lo de

n = Sqr(nval)

es solo que nosotros tomamos el valor entero de la raiz, aun que lo "Algebra" esta bien, pero si sabemos que long no va a aceptar los decimales pero si el entero... pues mejor simplificamos xP
Si, bueno, esa parte la habia entendido... pero no se donde se deduce/"saca" eso... a mi jamas se me hubiese ocurrido... tal vez Tokes sepa decirme :-\

BlackZeroX

#44
la respuesta esta en esto, por lo menos YO lo entiendo en estas secciones...



**  ***  ****  *****  ******  *******
   ***  ****  *****  ******  *******
        ****  *****  ******  *******
              *****  ******  *******
                     ******  *******
                             *******

The value of the Möbius function μ(x) for any pronic number x = n (n + 1), in addition to being computable in the usual way, can also be calculated as

   μ(x) = μ(n) μ(n + 1).

The Dark Shadow is my passion.

cobein

Bien, ya ni me molesto Karcrack, la unica idea que se me habia ocurrido despues de leer un poco era utilizar el mmx para calcular la aproximacion de la raiz cuadrada....cosa que ya hiciste :(

mmmmm no es justo ;(
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

LeandroA

che funciona?, no me muestra nada

Option Explicit
Dim clsIsOblongo As cIsOblongo


Private Sub Form_Load()
    Dim i   As Long
    Dim n   As Long

    Set clsIsOblongo = New cIsOblongo

    For i = 0 To 100
        If clsIsOblongo.IsOblongo(i, n) Then
            Debug.Print n, i
        End If
       
    Next i

End Sub

Karcrack

#47
Dejame comprobar Leandro, algo esta fallando :-\... alguna modificacion que habre hecho antes de subirlo... dame un segundo...
MOD: Es un problema con el stack, por lo visto las funciones en las clases trabajan de otra manera, ya mismo lo reparo ;)


Arreglado el codigo en ASM, ahora debe ser mas rapida, se salta los numeros impares ;)
http://karcrack.pastebin.com/MUkSE1qs