Excel - Macro para Numeros Primos

   
Vista:

Macro para Numeros Primos

Publicado por Sudo (1 intervención) el 08/03/2015 08:47:21
Hola, como se haría un macro el cual al darle un numero N, muestre en Diferentes celdas de Excel todos los numeros primos entre 1 y N?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Macro para Numeros Primos

Publicado por Martin (9 intervenciones) el 11/03/2015 20:00:47
Es un poco burda porque la hice ahora medio a las apuradas. La macro es RellenaPrimos y funciona así:
Primero te pregunta con un inputbox tu número N (una respuesta menor a 2 cancela el proceso, y si es mayor a 2.147.483.647 provoca un error de desbordamiento. De todas formas te sugiero que definas un techo más chico).
Luego llama a la función ArrayPrimos, que devuelve justamente un vector con los números primos que encontró (ojo, con números altos se puede demorar).
Para finalizar, los escribe en las celdas de la columna A.

Traté de evitar el tener que dividir número por número para buscar los primos, en cambio procedí al revés tachando los múltiplos de los números que encontraba. Creo que es una solución bastante elegante.

Después decime si te sirvió


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Function ArrayPrimos(Numero)
    Dim Contador1, Contador2, Primos(), PrimosReturn()
    Dim x, y
 
    ReDim Primos(2 To Numero)
 
    For x = 2 To Numero
        If Primos(x) <> -1 Then
            Primos(x) = x
            Contador1 = Contador1 + 1
            For y = x + x To Numero Step x
                Primos(y) = -1
            Next y
        End If
    Next x
 
    ReDim PrimosReturn(0 To Contador1 - 1)
    Contador2 = 0
    For x = 2 To Numero
        If Primos(x) <> -1 Then
            PrimosReturn(Contador2) = Primos(x)
            Contador2 = Contador2 + 1
        End If
    Next x
 
    ArrayPrimos = PrimosReturn
End Function
 
 
Sub RellenaPrimos()
    Dim NumeroDestino As Long, Primos, x
 
    NumeroDestino = Val(InputBox("Ingrese el número hasta el que se efectuará el cálculo" & vbCr & "entre 2 y 2.147.483.647", _
                                     "Cálculo de números primos", 100))
    If NumeroDestino < 2 Then Exit Sub
 
    Primos = ArrayPrimos(NumeroDestino)
 
    For x = 1 To UBound(Primos)
        ActiveSheet.Cells(x, 1).Value = Primos(x - 1)
    Next x
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar