Hola aqui les dejo el codigo de un pequeño programa, que crea todos los números primos que deseen, esta basado en visual basic 6 y solo lleva un un formulario con estos controles

el formulario debe ser a pantalla completa para poder graficar en él.
Crea los números tratandolos como texto, y prueba que son primos, dividiéndolos por los primos anteriores, aquel que en todas las divisiones cree resto distinto de 0 serpa el siguiente primo.
Los números creados son guardados en un archivo de texto plano, que debe crearse primero en la ubicación que se desea y solo colocar como dato el número 2, lo adjunto por las dudas y lo copian a la carpeta con la ruta que especifiquen.
En 2 horas de trabajo logre tener los números primos hasta el millón, lógicamente el proceso se ralentiza cada vez más para números mayores.
Tambien les dejo el adjunto del programa compilado ejecutable comprimido
el formulario debe ser a pantalla completa para poder graficar en él.
Crea los números tratandolos como texto, y prueba que son primos, dividiéndolos por los primos anteriores, aquel que en todas las divisiones cree resto distinto de 0 serpa el siguiente primo.
Los números creados son guardados en un archivo de texto plano, que debe crearse primero en la ubicación que se desea y solo colocar como dato el número 2, lo adjunto por las dudas y lo copian a la carpeta con la ruta que especifiquen.
En 2 horas de trabajo logre tener los números primos hasta el millón, lógicamente el proceso se ralentiza cada vez más para números mayores.
Código:
Public Num As StringPublic Cant As Single
Public Ban As Integer
Private Sub Command1_Click()
Dim Gap(100001) As Double
Open Text1.Text For Input As #4
ant = "1"
While Not EOF(4)
Line Input #4, primo
Num = primo
gaps = primo - ant
Gap(CSng(gaps)) = Gap(CSng(gaps)) + 1
ant = primo
Wend
Close #4
For x = 2 To 100000 Step 2
If Gap(x) > 0 Then
ngap = x
End If
If Maxgap <= Gap(x) Then
Maxgap = Gap(x)
End If
Next
inix = 10000
iniy = 10000
gapant = Gap(2)
a = 4
Do Until a > ngap
Line (inix + (a - 2) * 10000 / ngap, iniy - 10000 * gapant / Maxgap)-(inix + a * 10000 / ngap, iniy - 10000 * Gap(a) / Maxgap), &H0&
Line (inix + (a - 2) * 10000 / ngap, iniy - 10000 * gapant * (a - 2) / 100000)-(inix + a * 10000 / ngap, iniy - 10000 * Gap(a) * a / 100000), &HFF&
gapant = Gap(a)
a = a + 2
Loop
End Sub
Private Sub Command3_Click()
Open Text1.Text For Input As #1
While Not EOF(1)
Line Input #1, primo
Num = primo
Numero.Text = Num
Wend
Close #1
Cant = 0
Do While Cant < CSng(cnt.Text)
Ban = 0
ln = Len(Num)
' leo un dato
Open Text1.Text For Input As #2
While Not EOF(2)
Line Input #2, primo
lp = Len(primo)
If Divide(Num, primo) Then
Ban = Ban + 1
Close #2
GoTo 1
End If
Wend
Close #2
If Ban = 0 And Num <> 2 Then
Open Text1.Text For Append As #3 'Crear el archivo plano
Print #3, Num
Close #3
If Cant / 10 = Int(Cant / 10) Then
Numero.Text = Num
Numero.Refresh
End If
Cant = Cant + 1
End If
1 a = 0
Do Until a = ln
x = Mid(Num, ln - a, 1)
sig = CInt(x) + 1
If sig = 10 Then
If a = ln - 1 Then
Num = "10" & Right(Num, ln - 1)
Else
Num = Left(Num, ln - a - 1) & "0" & Right(Num, a)
End If
a = a + 1
Else
If a = 0 Then
Num = Left(Num, ln - a - 1) & sig
Else
Num = Left(Num, ln - a - 1) & sig & Right(Num, a)
End If
Exit Do
End If
Loop
Loop
MsgBox ("TERMINO")
End Sub
Public Function Divide(a, B) As Boolean
ln = Len(a)
lp = Len(B)
If CSng(Left(a, 1)) < CSng(Left(B, 1)) Then
uso = Len(B) + 1
Else
uso = Len(B)
End If
parte = Mid(a, 1, uso)
n = 0
Do Until n > Len(a) - uso
E = Int(CSng(parte) / CSng(B))
r = CSng(parte) - CSng(B) * E
If n = Len(a) - uso Then
If r = 0 Then
Divide = True
Exit Function
Else
Divide = False
Exit Function
End If
End If
parte = CStr(10 * r + CSng(Mid(a, n + uso + 1, 1)))
n = n + 1
Loop
End Function









Pero vaya no sabía que había ese problema con números grandes, la verdad que ni idea de Visual Basic, ni casi de programación en general (hice algo de Pascal hace años pero ya ni me acuerdo 


Comentario