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
Comentario