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