VBA Excel - Números primos

VBA Excel - Números primos

Introducción

El Tamiz de Eratóstenes es un algoritmo que nos permite encontrar todos los números primos hasta un límite específico (número n ). Esto implica recorrer todos los números desde 2 hasta n, para verificar si el número activo es un múltiplo. Si no es un múltiplo, entonces el número es un número primo.
  • Más información sobre el Tamiz de Eratóstenes en Wikipedia: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes

El algoritmo

Primero necesitaremos enumerar todos los números hasta NbreMax.
  • 1 es eliminado.
  • Resalta 2 y elimina todos sus múltiples
  • Repita la operación para el número 3 .
  • Elija el número más pequeño sin resaltar y luego elimine todos sus múltiplos (número 5, ...).
  • Repita el proceso hasta que llegue a la parte entera de la raíz de n .

¡Todos los números restantes (hasta n) son números primos!

La función

Este tipo de función se puede modificar fácilmente para devolver un tipo de número entero o largo ... El código es bastante lento de ejecutar, por lo que nos limitaremos a los primeros 1500 números primos ...

 Función NbPremiers_Eratosthene (Rang As Long) como variante

'Verifique el nth número primo usando el Tamiz de Eratóstenes

Dim i As Long, j As Long, k As Long, NbreMax As Long, est_premier (), Flag As Boolean

Si Rang> = 1 y Rang <= 1500 entonces

ReDim Preserve est_premier (Rang)

k = 0

NbreMax = 20 * Rang 'suffit pour un rang <1500

Bandera = Verdadero

Para i = 2 a NbreMax

Para j = 2 a i

Si j = i Then Exit For

Si i Mod j = 0 Entonces Flag = False: Salir para

Siguiente

Si Flag = True entonces

Si i = 2 entonces

est_premier (k) = 1

k = k + 1

Más

est_premier (k) = i

k = k + 1

Terminara si

Más

Bandera = Verdadero

Terminara si

Si k = sonó entonces salga para

Siguiente yo

NbPremiers_Eratosthene = est_premier (Rang - 1)

Más

NbPremiers_Eratosthene = "Rang trop grand ou trop petit (compris entre 1 and 1500 inclus)."

Terminara si

Función final

Invocando la función

Hay dos métodos disponibles:

El numero numero primo

 Prueba secundaria ()

Para obtener el número primo número 499:

MsgBox NbPremiers_Eratosthene (499)

End Sub

Obtenga la lista de los primeros 99 números primos

 Sub ListeNbPrems ()

'Obtener una lista de los primeros 99 números primos

Dim i As Long, Msg As String, Tb (98)

Para i = 1 a 99

Tb (i - 1) = NbPremiers_Eratosthene (i)

Siguiente yo

MsgBox Tb (0) & "" & Tb (1) & "" & Tb (2) & "..." & Tb (UBound (Tb))

End Sub

Enlace de descarga

Descargue el libro de muestra aquí: //cjoint.com/14au/DHfoihzPEV2.htm
Artículo Anterior Artículo Siguiente

Los Mejores Consejos