Cita:
Iniciado por Txoco
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