Ver Mensaje Individual
  #7 (permalink)  
Antiguo 14/07/2008, 16:22
Avatar de Jhonnyf
Jhonnyf
 
Fecha de Ingreso: septiembre-2007
Ubicación: Dentro de mi
Mensajes: 87
Antigüedad: 16 años, 7 meses
Puntos: 5
Respuesta: programa que muestre la suma de los primeros "n" numeros primos

Cita:
Iniciado por Txoco Ver Mensaje
Hola!

La forma de buscar los primos sí que me ha parecido muy elegante, pero le he visto un fallo...

Por ejemplo, para txtN_numero.Text = 5 y txtN_numero = 6, devuelve "11", cuando debería devolver "18" (1 + 2 + 3 + 5 + 7) y "29", respectivamente (+11). Lo que está haciendo es sumar los primos que encuentra entre los n primeros números, no los n primeros primos.

Si lo he entendido bien, sería algo así (me he basado en tu mismo código):

Código:
Public Function SumaDePrimos(ByVal TotalPrimos As Long) As Long
Dim Suma As Long
Dim PrimosEncontrados As Long
Dim i As Long
Dim j As Long

    If TotalPrimos > 0 Then Suma = 1
    
    i = 1
    PrimosEncontrados = 1
    Do While PrimosEncontrados < TotalPrimos
        i = i + 1
        For j = 2 To i
            If (i Mod j = 0) Then
                If j = i Then
                    Suma = Suma + i
                    PrimosEncontrados = PrimosEncontrados + 1
                End If
                Exit For
            End If
        Next j
    Loop
    
    SumaDePrimos = Suma
End Function
??????????????????????
veamos, pidieron la SUMA de los N primeros Primos

si pone 5, los primeros numeros primos serán
1+2+3+5 = 11
Si pone 6, los primeros Numeros primos seguiran siendo
1+2+3+5 = 11
Si pone 7, los Primeros numeros Primos serán:
1+2+3+5+7 = 18

No sé porque dices que esta mal....

y sorry por no documentarlo que lo hize al toque... aqui le dejo bien masticadito como es la nuez :D


Código:
Private Sub cmdCalcular_Click()
'Como un Numero Primo es aquel que es divisible
'solo por si mismo o por 1, entonces ya de por si,
'el 1 entra si o si si ha puesto un valor mayor que 0

Dim Suma As Long
'Sumando el primer Primo, osea el 1
If Val(txtN_numero.Text) > 0 Then 'Si puso un numero mayor que 0 entonces ya le sumo el 1
Suma = 1
End If

    
    For i = 2 To Val(txtN_numero.Text) 'vamos a recorrer desde el 2 hasta el numero que puso, no desde 1 porque ya lo sumanos al inicio, y todos los numros son divisibles por 1
        For j = 2 To i 'vamos a recorres desde el 2 hasta el numero en que se encuentra evaluando actualmente, osea, va a hacer el numero entre 2, luego entre 3, luego entre 4, etc
        
        If (i Mod j = 0) Then ' si el residuo de la division, el numero Actual / el que esta recomiendo = 0 entonces es porque el numero es divisible por algo
            If j = i Then 'Si el numero que esta recorriendo es igual al ultimo numero actual, entonces es porque es primo!!! (11 mod 11 = 0 ; adicionalmente es el Ultimo que evaluamos osea 11=11; por tanto es primo)
                Suma = Suma + i 'Sumamos a los primos encontrado el numero actual
            End If
            Exit For 'Si el numero es Divisible por Algo, y no es el ultimo que evaluamos (10 mod 5 = 0 ; adicionalmente 10 es diferente 5, por tanto no es primo) asi que salimos el Primer For para que evalue el siguiente Numero, de nada sirve recorrer hasta el final porque ya sabemos que no es primo
        End If
        Next
    Next
    txtSumaPrimos.Text = Suma 'Cuando acaba lo muestra
End Sub