Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 15 de 21

Hilo: Software para crear números primos

  1. #1
    Registro
    Mar 2015
    Ubicación
    Lujan Buenos Aires Argentina
    Posts
    3 845
    Nivel
    Universidad (Ingeniería)
    Artículos de blog
    39
    ¡Gracias!
    1 796 (1 603 msgs.)

    Predeterminado Software para crear números primos

    Hola aqui les dejo el codigo de un pequeño programa, que crea todos los números primos que deseen, esta basado en visual basic 6 y solo lleva un un formulario con estos controles

    Nombre:  form primo.png
Vistas: 282
Tamaño: 4,8 KB

    el formulario debe ser a pantalla completa para poder graficar en él.
    Crea los números tratandolos como texto, y prueba que son primos, dividiéndolos por los primos anteriores, aquel que en todas las divisiones cree resto distinto de 0 serpa el siguiente primo.
    Los números creados son guardados en un archivo de texto plano, que debe crearse primero en la ubicación que se desea y solo colocar como dato el número 2, lo adjunto por las dudas y lo copian a la carpeta con la ruta que especifiquen.
    En 2 horas de trabajo logre tener los números primos hasta el millón, lógicamente el proceso se ralentiza cada vez más para números mayores.

    Código:
    Public Num As StringPublic Cant As Single
    Public Ban As Integer
    
    
    Private Sub Command1_Click()
    Dim Gap(100001) As Double
    Open Text1.Text For Input As #4
    ant = "1"
    While Not EOF(4)
        Line Input #4, primo
        Num = primo
        gaps = primo - ant
       Gap(CSng(gaps)) = Gap(CSng(gaps)) + 1
       ant = primo
    Wend
    Close #4
    For x = 2 To 100000 Step 2
    If Gap(x) > 0 Then
    ngap = x
    End If
    If Maxgap <= Gap(x) Then
    Maxgap = Gap(x)
    End If
    Next
    
    
    inix = 10000
    iniy = 10000
    gapant = Gap(2)
    a = 4
    Do Until a > ngap
    Line (inix + (a - 2) * 10000 / ngap, iniy - 10000 * gapant / Maxgap)-(inix + a * 10000 / ngap, iniy - 10000 * Gap(a) / Maxgap), &H0&
    Line (inix + (a - 2) * 10000 / ngap, iniy - 10000 * gapant * (a - 2) / 100000)-(inix + a * 10000 / ngap, iniy - 10000 * Gap(a) * a / 100000), &HFF&
    gapant = Gap(a)
    a = a + 2
    Loop
    
    
    End Sub
    
    
    Private Sub Command3_Click()
    Open Text1.Text For Input As #1
    While Not EOF(1)
        Line Input #1, primo
        Num = primo
        Numero.Text = Num
    Wend
    Close #1
    Cant = 0
    
    
    Do While Cant < CSng(cnt.Text)
        Ban = 0
        ln = Len(Num)
        
    ' leo un dato
        Open Text1.Text For Input As #2
        While Not EOF(2)
            Line Input #2, primo
            lp = Len(primo)
            
            If Divide(Num, primo) Then
                Ban = Ban + 1
                Close #2
                GoTo 1
            End If
        Wend
        Close #2
        If Ban = 0 And Num <> 2 Then
            Open Text1.Text For Append As #3  'Crear el archivo plano
            Print #3, Num
            
            
            Close #3
            If Cant / 10 = Int(Cant / 10) Then
            Numero.Text = Num
            Numero.Refresh
            End If
            Cant = Cant + 1
        End If
    1    a = 0
        Do Until a = ln
            x = Mid(Num, ln - a, 1)
            sig = CInt(x) + 1
            If sig = 10 Then
                If a = ln - 1 Then
                    Num = "10" & Right(Num, ln - 1)
                Else
                    Num = Left(Num, ln - a - 1) & "0" & Right(Num, a)
                End If
                a = a + 1
            Else
                If a = 0 Then
                    Num = Left(Num, ln - a - 1) & sig
                Else
                    Num = Left(Num, ln - a - 1) & sig & Right(Num, a)
                End If
                Exit Do
            End If
        Loop
    Loop
    MsgBox ("TERMINO")
    End Sub
    Public Function Divide(a, B) As Boolean
    ln = Len(a)
    lp = Len(B)
    If CSng(Left(a, 1)) < CSng(Left(B, 1)) Then
    uso = Len(B) + 1
    Else
    uso = Len(B)
    End If
    parte = Mid(a, 1, uso)
    n = 0
    Do Until n > Len(a) - uso
        E = Int(CSng(parte) / CSng(B))
        r = CSng(parte) - CSng(B) * E
        If n = Len(a) - uso Then
            If r = 0 Then
               Divide = True
               Exit Function
            Else
               Divide = False
               Exit Function
            End If
        End If
        parte = CStr(10 * r + CSng(Mid(a, n + uso + 1, 1)))
        n = n + 1
    Loop
    End Function
    Tambien les dejo el adjunto del programa compilado ejecutable comprimido
    Archivos adjuntos Archivos adjuntos

  2. 3 usuarios dan las gracias a Richard R Richard por este mensaje tan útil:

    Alriga (21/10/2018),FVPI (21/10/2018),Maq77 (21/10/2018)

  3. #2
    Registro
    Feb 2015
    Ubicación
    Buenos Aires
    Posts
    105
    Nivel
    Universidad (Otras ciencias)
    ¡Gracias!
    31 (24 msgs.)

    Predeterminado Re: Software para crear números primos

    Por acá más o menos lo mismo:

    Nombre:  CalculaPrimos.png
Vistas: 198
Tamaño: 14,9 KB

    El Código

    Código:
    '****************************************************************************************
    '* PROYECTO      : CALCULA PRIMOS
    '* CONTENIDO     : PERMITE CALCULAR NÚMEROS PRIMOS
    '* VERSION       : 1.1
    '* AUTORES       : MIGUEL QUINTEIRO PIÑERO / MIGUEL QUINTEIRO FERNANDEZ
    '* INICIO        : 16 DE JUNIO DE 2013
    '* ACTUALIZACION : 16 DE JUNIO DE 2013
    '****************************************************************************************
    Option Explicit
    
    Dim miNumero As Currency
    Dim miRaizEntera As Currency
    Dim miResto As Integer
    Dim miPrueba As Currency
    Dim miDivisor As Currency
    Dim miIndice As Long
    
    Private Sub cmdCalculaPrimo_Click()
        lstPrimos.Clear
        lstPrimos.AddItem 2
        lstPrimos.AddItem 3
        miNumero = Val(txtMeta)
        For miPrueba = 3 To miNumero Step 2
            miRaizEntera = Int(Sqr(miPrueba))
            For miIndice = 1 To (lstPrimos.ListCount - 1)
                lstPrimos.ListIndex = miIndice
                miDivisor = Val(lstPrimos.Text)
                If miDivisor > miRaizEntera Then
                    lstPrimos.AddItem miPrueba
                    miIndice = lstPrimos.ListCount - 1
                Else
                    miResto = miPrueba Mod miDivisor
                    If miResto = 0 Then
                        miIndice = lstPrimos.ListCount - 1
                    End If
                End If
            Next miIndice
        Next miPrueba
    End Sub
    Saludos.

    - - - Actualizado - - -

    El programa detecta primos bastante rápido ya que evita la mayor cantidad de cuentas innecesarias.

    El ciclo de busqueda solo recorre a los números impares, y solo los divide entre los primos menores a la raiz cuadrada del buscado.

    Sigo buscando la forma de optimizarlo aun más.

    Saludos.

    - - - Actualizado - - -

    Para posibles optimizaciones al programa estaba pensando en incluir dos funciones que realicen las siguientes tareas:

    a) Detectar si el número a estudiar termina en 5: Al principio haría más lento al programa, pero a la larga sería bueno descartar a estos valores muy grandes finalizados en "5" sin dividirlos entre todos los primos anteriores a su raiz cuadrada.

    b) Suma de los dígitos del número a estudiar para ver si es multiplo de 3: De la misma forma que antes, para valores pequeños haría mas lento el programa, pero para valores muy grandes creo que sería menos costoso computacionalmente sumar los dígitos internos del valor que tratar de descartarlo por la vía de las divisiones sucesivas.

    Esto con la finalidad de poder trabajar con números realmente grandes, en periodos cada vez más cortos.

    Saludos.

  4. 2 usuarios dan las gracias a Maq77 por este mensaje tan útil:

    Alriga (22/10/2018),Richard R Richard (22/10/2018)

  5. #3
    Registro
    Apr 2008
    Posts
    108
    Nivel
    Aficionado (divulgación)
    ¡Gracias!
    12 (12 msgs.)

    Predeterminado Re: Software para crear números primos

    No entiendo mucho de programación, pero no sería más eficiente usar la criba de Eratóstenes? https://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes

    Salu2

  6. #4
    Registro
    Mar 2015
    Ubicación
    Lujan Buenos Aires Argentina
    Posts
    3 845
    Nivel
    Universidad (Ingeniería)
    Artículos de blog
    39
    ¡Gracias!
    1 796 (1 603 msgs.)

    Predeterminado Re: Software para crear números primos

    Cita Escrito por u_maligno Ver mensaje
    No entiendo mucho de programación, pero no sería más eficiente usar la criba de Eratóstenes? https://es.wikipedia.org/wiki/Criba_de_Erat%C3%B3stenes
    Quizá para un número bajo de primos si sea más eficiente, pues requiere que precargues los naturales para ir desechando los divisibles En cambio el programa que hice casi no tiene limite en la cantidad de cifras que debe tener el número primo.
    Yo construí el algoritmo explorando todos los naturales, pero la opción de maq77, acelera el proceso ya que evita un par de loops y preguntas, además tiene un numero de corte lógico, que acelera la búsqueda. Ya veré que puedo mejorar del código.
    Si los números naturales se los guarda en variables numéricas o variant, llegara el punto donde se exceda el limite admitido por la variable mucho mas rápido, que si es un string, que puede contener 2^{31} cifras para el primo...luego se convierte en un problema de eficiencia ya que el siguiente primo tarda por lo general mas tiempo que el anterior.

    Incluso hilando fino algunos cálculos de mi programa deben hacerse de otro modo, pues usan variables numéricas. Las divisiones y multiplicaciones deben hacerse entre strings de datos
    Última edición por Richard R Richard; 23/10/2018 a las 00:30:52.

  7. El siguiente usuario da las gracias a Richard R Richard por este mensaje tan útil:

    Maq77 (23/10/2018)

  8. #5
    Registro
    Feb 2015
    Ubicación
    Buenos Aires
    Posts
    105
    Nivel
    Universidad (Otras ciencias)
    ¡Gracias!
    31 (24 msgs.)

    Predeterminado Re: Software para crear números primos

    Revisa información de "El Guille" "Visual Basic" aritmética con números grandes en google, el encontró la manera de trabajar con números de cualquier cantidad de cifras, yo multipliqúe con su programa dos números de 400 cifras cada uno, y lo modifiqué para que me diera el factorial de practicamente cualquier "n".

    De verdad que no tiene desperdicio:

    http://www.elguille.info/NET/dotnet/...andes1.htm#vb6


    http://www.elguille.info/NET/dotnet/...rosGrandes.htm


    Se puede modificar y adaptar para la búsqueda de números primos muy grandes.

    Saludos.
    Última edición por Maq77; 23/10/2018 a las 02:41:54. Razón: Agregar Información

  9. 2 usuarios dan las gracias a Maq77 por este mensaje tan útil:

    Alriga (23/10/2018),Richard R Richard (23/10/2018)

  10. #6
    Registro
    Apr 2008
    Posts
    108
    Nivel
    Aficionado (divulgación)
    ¡Gracias!
    12 (12 msgs.)

    Predeterminado Re: Software para crear números primos

    Ok, gracias a los dos. Yo como veía que Maq77 iba descartando cada vez más múltiplos de primos (2,3,5..) pensé que igual sería mejor usar directamente la criba de Eratostenes Pero vaya no sabía que había ese problema con números grandes, la verdad que ni idea de Visual Basic, ni casi de programación en general (hice algo de Pascal hace años pero ya ni me acuerdo )

    Salu2

  11. #7
    Registro
    Mar 2015
    Ubicación
    Lujan Buenos Aires Argentina
    Posts
    3 845
    Nivel
    Universidad (Ingeniería)
    Artículos de blog
    39
    ¡Gracias!
    1 796 (1 603 msgs.)

    Predeterminado Re: Software para crear números primos

    He corregido el codigo, en base a las premisas de maq77, logre los primos hasta el millon en 5 minutos..... una hora 55 minutos menos que antes

    Código:
    Public Num As StringPublic Cant As Single
    Public Ban As Integer
    
    
    Private Sub Command1_Click()
    Dim Gap(100001) As Double
    Open Text1.Text For Input As #4
    ant = "1"
    While Not EOF(4)
        Line Input #4, primo
        Num = primo
        gaps = primo - ant
       Gap(CSng(gaps)) = Gap(CSng(gaps)) + 1
       ant = primo
    Wend
    Close #4
    For x = 2 To 100000 Step 2
    If Gap(x) > 0 Then
    ngap = x
    End If
    If Maxgap <= Gap(x) Then
    Maxgap = Gap(x)
    End If
    Next
    
    
    inix = 10000
    iniy = 10000
    gapant = Gap(2)
    A = 4
    Do Until A > ngap
    Line (inix + (A - 2) * 10000 / ngap, iniy - 10000 * gapant / Maxgap)-(inix + A * 10000 / ngap, iniy - 10000 * Gap(A) / Maxgap), &H0&
    Line (inix + (A - 2) * 10000 / ngap, iniy - 10000 * gapant * (A - 2) / 100000)-(inix + A * 10000 / ngap, iniy - 10000 * Gap(A) * A / 100000), &HFF&
    gapant = Gap(A)
    A = A + 2
    Loop
    
    
    End Sub
    
    
    Private Sub Command3_Click()
    Open Text1.Text For Input As #1
    While Not EOF(1)
        Line Input #1, primo
        Num = primo
        Numero.Text = Num
    Wend
    Close #1
    Cant = 0
    
    
    Do While Cant < CSng(cnt.Text)
        Ban = 0
        ln = Len(Num)
    ' leo un dato
        Open Text1.Text For Input As #2
        While Not EOF(2)
            Line Input #2, primo
            lp = Len(primo)
            
            If Divide(Num, primo) Then
                Ban = Ban + 1
                Close #2
                GoTo 1
            End If
            If lp * 2 - 1 > ln Then
                Close #2
                GoTo 2
            End If
        Wend
        Close #2
    2    If Ban = 0 And Num <> 2 Then
            Open Text1.Text For Append As #3  'Crear el archivo plano
            Print #3, Num
                    
            Close #3
            If Cant / 10 = Int(Cant / 10) Then
            Numero.Text = Num
            Numero.Refresh
            End If
            Cant = Cant + 1
        End If
    1    A = 0
        Do Until A = ln
            x = Mid(Num, ln - A, 1)
            If x = 2 And ln = 1 Then
            sig = CInt(x) + 1
            ElseIf A = 0 Then
            sig = CInt(x) + 2
            Else
            sig = CInt(x) + 1
            End If
            If sig = 11 Or sig = 10 Then
                If ln = 1 Then
                Num = 11
                Else
                    If A = ln - 1 Then
                        Num = "10" & Right(Num, ln - 1)
                    Else
                        Num = Left(Num, ln - A - 1) & Right(CStr(sig), 1) & Right(Num, A)
                    End If
                    
                End If
                A = A + 1
            Else
                If A = 0 Then
                    Num = Left(Num, ln - A - 1) & sig
                Else
                    Num = Left(Num, ln - A - 1) & Right(CStr(sig), 1) & Right(Num, A)
                End If
                Exit Do
            End If
        Loop
    Loop
    MsgBox ("TERMINO")
    End Sub
    
    
    Public Function Divide(C, D) As Boolean
    ln = Len(C)
    lp = Len(D)
    If CSng(Left(C, 1)) < CSng(Left(D, 1)) Then
    uso = Len(D) + 1
    Else
    uso = Len(D)
    End If
    parte = Mid(C, 1, uso)
    n = 0
    Do Until n > Len(C) - uso
        E = Int(CSng(parte) / CSng(D))
        r = CSng(parte) - CSng(D) * E
        If n = Len(C) - uso Then
            If r = 0 Then
               Divide = True
               Exit Function
            Else
               Divide = False
               Exit Function
            End If
        End If
        parte = CStr(10 * r + CSng(Mid(C, n + uso + 1, 1)))
        n = n + 1
    Loop
    End Function

    Coloque limite los cálculos en vez de debajo de la raíz de Num , como en este soft el numero es un string de texto , lo hice limitando la longitud de los numeros que estan por arriba de la raiz de Num
    y cargando siempre impares en el algoritmo de detección
    Última edición por Richard R Richard; 26/10/2018 a las 04:34:08.

  12. El siguiente usuario da las gracias a Richard R Richard por este mensaje tan útil:

    Maq77 (26/10/2018)

  13. #8
    Registro
    Apr 2008
    Posts
    108
    Nivel
    Aficionado (divulgación)
    ¡Gracias!
    12 (12 msgs.)

    Predeterminado Re: Software para crear números primos

    Hola Richard, podrías comprobar una cosa? La conjetura de Legendre afirma que existe al menos un primo entre n^2 y (n+1)^2 (entre cuadrados consecutivos vaya), no te voy a pedir que compruebes esto ya que si aún es conjetura será porque nadie a conseguido encontrar un contraejemplo pero, podrías ver si se cumple también entre (x^2 + x)/2 y ((x+1)^2 + (x+1))/2 (entre sumatoria de naturales en vez de cuadrados)?

    Si no es mucho lío eh, es para darle algo de vidilla al programa (vale, y por curiosidad morbosa )

    Salu2

  14. El siguiente usuario da las gracias a u_maligno por este mensaje tan útil:

    Maq77 (26/10/2018)

  15. #9
    Registro
    Mar 2015
    Ubicación
    Lujan Buenos Aires Argentina
    Posts
    3 845
    Nivel
    Universidad (Ingeniería)
    Artículos de blog
    39
    ¡Gracias!
    1 796 (1 603 msgs.)

    Predeterminado Re: Software para crear números primos

    Bueno , también hay otras conjeturas con que siempre hay un primo entre n y 2n inclusive, y entre 2n y 3n...algo mas difícil que no hay gaps de tamaño n hasta mas allá de n^2...

    Se les ocurre alguna mas, para validar/ refutar empíricamente?

    Lo que tengo que hacer esjar correr el programa al menos hasta el100000000 o 1000000000 para tener números y tiempos de pc dentro de lo posibles normales, cuando tenga la tabla de primos se las comparto
    Última edición por Richard R Richard; 26/10/2018 a las 10:51:20.

  16. 2 usuarios dan las gracias a Richard R Richard por este mensaje tan útil:

    Maq77 (26/10/2018),u_maligno (26/10/2018)

  17. #10
    Registro
    Apr 2008
    Posts
    108
    Nivel
    Aficionado (divulgación)
    ¡Gracias!
    12 (12 msgs.)

    Predeterminado Re: Software para crear números primos

    Al parecer eso ya no es conjetura sino postulado https://es.wikipedia.org/wiki/Postulado_de_Bertrand Pero ahora me haces dudar, no acabo de entender por qué la de Legendre (o incluso la que puse yo) sigue siendo conjetura si crece más rápidamente.. xD

    Supongo que lo interesante sería encontrar alguna que se pudiera refutar, y no las que ya se han comprobado hasta números gigantescos jeje

    Salu2

    Perdón, me lié entre postulado y teorema. Ni caso a lo primero que dije

    Segundo perdón, en realidad no me lié, releyendo veo que al final sí es teorema. Así que ya no entiendo nada xD
    Última edición por u_maligno; 26/10/2018 a las 14:07:41.

  18. El siguiente usuario da las gracias a u_maligno por este mensaje tan útil:

    Maq77 (26/10/2018)

  19. #11
    Registro
    Feb 2015
    Ubicación
    Buenos Aires
    Posts
    105
    Nivel
    Universidad (Otras ciencias)
    ¡Gracias!
    31 (24 msgs.)

    Predeterminado Re: Software para crear números primos

    Cita Escrito por Richard R Richard Ver mensaje
    He corregido el codigo, en base a las premisas de maq77, logre los primos hasta el millon en 5 minutos..... una hora 55 minutos menos que antes

    ....

    Coloque limite los cálculos en vez de debajo de la raíz de Num , como en este soft el numero es un string de texto , lo hice limitando la longitud de los numeros que estan por arriba de la raiz de Num y cargando siempre impares en el algoritmo de detección

    ¡Qué bueno haberte servido para algo!

    Por acá dos enlaces en los que se tienen ejemplos de códigos en diversos lenguajes de programación para el estudio y determinación de los numeros primos.

    La parte del código en VBA es aplicable perfectamente en VB6

    https://rosettacode.org/wiki/Category:Prime_Numbers

    https://rosettacode.org/wiki/Primali...l_division#VBA


    También existen en línea bibliotecas de archivos con una gran cantidad de números primos, por ejemplo en:

    https://numerosprimos.org/numeros-pr...e-1-a-1000000/

    Ya podemos encontrar el listado de los números primos menores al 1.000.000


    Es por eso que yo había enfocado el esfuerzo en encontrar un "Mejor Algoritmo" y no en un listado como tal, que ya hay muchos, es más encarar el asunto desde el punto de vista de "P Vs NP", y buscar un algoritmo que realmente baje el grado de complejidad de la tarea de determinar cual número es primo y cual no lo es.

    Al final, todos los métodos y algoritmos terminan siendo solo una Criba, algunas más sofisticadas y eficientes que otras, la idea es inventar o descubrir cual es la mejor de todas, la que consume menos recursos computacionales y de tiempo.

  20. 2 usuarios dan las gracias a Maq77 por este mensaje tan útil:

    Richard R Richard (27/10/2018),u_maligno (26/10/2018)

  21. #12
    Registro
    Jun 2015
    Ubicación
    Reus
    Posts
    4 041
    Nivel
    Universidad (Ingeniería)
    Artículos de blog
    5
    ¡Gracias!
    3 775 (2 487 msgs.)

    Predeterminado Re: Software para crear números primos

    Cita Escrito por u_maligno Ver mensaje
    Al parecer eso ya no es conjetura sino postulado https://es.wikipedia.org/wiki/Postulado_de_Bertrand ...
    No, no es un postulado, se le conoce con el nombre incorrecto de "postulado de Bertrand" por motivos históricos: Bertrand lo "postuló" en 1845, (hoy diríamos con más propiedad "lo conjeturó") y no fue capaz de demostrarlo. Su nombre matemáticamente correcto es "Teorema de Bertrand–Chebyshev" como yo lo nombré aquí: http://forum.lawebdefisica.com/threa...900#post185900

    Este teorema fue demostrado por Chebyshev en 1850.

    Saludos.
    Última edición por Alriga; 26/10/2018 a las 15:50:40. Razón: Lapsus numérico

  22. 4 usuarios dan las gracias a Alriga por este mensaje tan útil:

    Fortuna (28/10/2018),Jaime Rudas (26/10/2018),Maq77 (26/10/2018),u_maligno (26/10/2018)

  23. #13
    Registro
    Apr 2008
    Posts
    108
    Nivel
    Aficionado (divulgación)
    ¡Gracias!
    12 (12 msgs.)

    Predeterminado Re: Software para crear números primos

    Gracias Alriga, justo hace un rato volví a editar, en el mismo enlace que puse lo pone pero me confundí por el título. Voy a leer un poco más sobre el tema a ver si me aclaro, porque ahora mismo no entiendo que eso no demuestre también la conjetura de Legendre (algo se me debe de estar escapando )

    Salu2

    - - - Actualizado - - -

    Vale, ya lo entiendo. En realidad n^2 - (n+1)^2 es siempre menor que n^2 - 2n^2 para n > 2. xD
    Última edición por u_maligno; 26/10/2018 a las 15:00:26.

  24. #14
    Registro
    May 2015
    Ubicación
    Bogotá, Colombia
    Posts
    630
    Nivel
    Universidad (Ingeniería)
    Artículos de blog
    11
    ¡Gracias!
    325 (259 msgs.)

    Predeterminado Re: Software para crear números primos

    Cita Escrito por Alriga Ver mensaje
    Este teorema fue demostrado por Chebyshev en 1950.
    En realidad, fue demostrado en 1852: Chebyshov murió en 1894.

  25. El siguiente usuario da las gracias a Jaime Rudas por este mensaje tan útil:

    Maq77 (12/11/2018)

  26. #15
    Registro
    Feb 2015
    Ubicación
    Buenos Aires
    Posts
    105
    Nivel
    Universidad (Otras ciencias)
    ¡Gracias!
    31 (24 msgs.)

    Predeterminado Re: Software para crear números primos

    Por aca otra función que me da los números primos por debajo del 1.000.000 en menos de 10 segundos.

    Código:
    '****************************************************************************************
    '* PROYECTO      : NUMEROS PRIMOS
    '* CONTENIDO     : FUNCIONES GLOBALES
    '* VERSION       : 1.1
    '* AUTORES       : MIGUEL QUINTEIRO PIÑERO
    '* INICIO        : 26 DE JULIO DE 2017
    '* ACTUALIZACION : 26 DE JULIO DE 2017
    '****************************************************************************************
    
    Module Funciones
        ' Función para determinar si un número es o no primo
        Public Function Primo(ByVal pN As Long) As Boolean
            Dim i As Long
            Primo = True
            If (pN = 1) Or ((pN / 2) = Int(pN / 2)) Then
                Primo = False
            Else
                For i = 3 To Math.Sqrt(pN) Step 2
                    If (pN / i) = Int(pN / i) Then
                        Primo = False
                        i = pN
                    End If
                Next
            End If
        End Function
    End Module
    Trabaja de manera ligeramente diferente a la antes vista en el sentido que no almacena los primos anteriores para luego utilizarlos, simplemente asigna como primo a cualquier número a comprobar, luego verifica que el número sea 1 o un multiplo exacto del 2, en cuyo caso dice que no es primo y termina, y si no verifica si tiene algun factor exacto entre los números impares inferiores a su raiz cuadrada, si lo tiene cambia a que el numero no es primo. Si logra terminar todos los ciclos sin encontrar factores exactos termina quedándose como un número primo.

    Encuentra y señala a los 78.497 números primos por debajo del 1.000.000 en 5 segundos más o menos

    Nombre:  NPrimos1000000.jpg
Vistas: 142
Tamaño: 61,1 KB

    Saludos.

  27. El siguiente usuario da las gracias a Maq77 por este mensaje tan útil:

    Richard R Richard (27/10/2018)

Página 1 de 2 12 ÚltimoÚltimo

Información del hilo

Usuarios viendo este hilo

Ahora hay 1 usuarios viendo este hilo. (0 miembros y 1 visitantes)

Hilos similares

  1. Avanzado Sobre números primos, gap entre primos e infinitos…
    Por Maq77 en foro Métodos matemáticos
    Respuestas: 52
    Último mensaje: 13/11/2018, 22:30:09
  2. Divulgación Fórmula para obtención de números primos
    Por rarar en foro Métodos matemáticos
    Respuestas: 19
    Último mensaje: 04/01/2016, 20:08:17
  3. Cómo crear blog o páginas de recursos para compartir conocimiento para aprender
    Por alexpglez en foro Discusión general sobre web y foro
    Respuestas: 6
    Último mensaje: 13/01/2015, 23:55:56
  4. Divulgación Criba de Números Primos
    Por kaparreu en foro Métodos matemáticos
    Respuestas: 6
    Último mensaje: 12/03/2013, 15:28:55
  5. Pequeñas bromas con números primos....
    Por ^Cuervo^ en foro Problemas de ingenio
    Respuestas: 3
    Último mensaje: 10/08/2008, 17:45:27

Etiquetas para este hilo

Permisos de publicación

  • No puedes crear hilos
  • No puedes responder
  • No puedes adjuntar archivos
  • No puedes editar tus mensajes
  •