VB. Число простое или нет?
Добавлено: 23 дек 2013, 13:12
Дано натуральное число и требуется определить
простое оно или составное? Написал программу
на Visual Basic. Дал форме имя frmM и поместил
на ней однострочное текстовое окно под именем
Txt. Итак программа работает если происходит
событие: изменение содержимого окна. Когда
программа определяет, что нашла простое число
она меняет цвет шрифта этого числа с черного на
красный. Программа проверена и работает с числами
длинной до 16-ти знаков.
Впрочем, если добавить немного кода, то программа
будет работать с числами любой длины. Но долго.
чем больше число, тем больше ждать, когда программа
его обработает.Я могу увеличить скорость раза в 1,5, но
не более того.
Вопрос:
Существует ли алгоритм, который бы позволил кардинально
увеличить скорость программы.
простое оно или составное? Написал программу
на Visual Basic. Дал форме имя frmM и поместил
на ней однострочное текстовое окно под именем
Txt. Итак программа работает если происходит
событие: изменение содержимого окна. Когда
программа определяет, что нашла простое число
она меняет цвет шрифта этого числа с черного на
красный. Программа проверена и работает с числами
длинной до 16-ти знаков.
Впрочем, если добавить немного кода, то программа
будет работать с числами любой длины. Но долго.
чем больше число, тем больше ждать, когда программа
его обработает.Я могу увеличить скорость раза в 1,5, но
не более того.
Вопрос:
Существует ли алгоритм, который бы позволил кардинально
увеличить скорость программы.
Код: Выбрать все
Option Explicit
Private Sub Txt_Change()
Dim P As Long, i As Long, j As Long, D As Long
Dim sS As String, sA As String, sB As String
Dim nBB(6) As integer
Dim nA As Long, nR As Long
If Txt.Text=""Then Goto 777
sS=Txt.Text
Txt.Visible=False
frmM.Refresh
If Len(sS)<10 Then Goto 333 sA=Left$(sS,9) sB=Right$(sS,Len(sS)-9) nA=Val(sA) For i=0 To 6 nBB(i)=Val(Mid$(sB,i+1,1) Next i If (nBB(Len(sS)-10) Mod 2)=0 Then Goto 555 D=Fix(Sqr(Val(sS)))+1 For i=3 To D Step 2 nR=nA Mod i For j=0 To Len(sS)-10 nR=(10*nR+nBB(j)) Mod i Next j If nR=0 Then Goto 555 Next i Txt.ForeColor=vbRed Goto 777333: P=Val(sS) If (P=2) Or (P=3) Or (P=5) Or (P=7) Then Txt.ForeColor=vbRed: Goto 777 End If If (P=1) Or (P Mod 2=0) Then Txt.ForeColor=vbBlack: Goto 555 End If D=Fix(Sqr(P))+1 For i=3 To D Step 2 If P Mod i = 0 Then Goto 555 Next i Txt.ForeColor=vbRed: Goto 777555: Txt.ForeColor=vbBlack777: Txt.Visible=TrueEnd Sub