Простое число или нет? - VB
Формулировка задачи:
Это программа определяет является ли число простым.
Дана форма. На ней текстовое поле, в которое можно
ввести число (максимум 16 цифр). Если число простое, то
оно становится красным, а нет - оно черное. Время вычисления
самого большого простого числа где-то полсекунды.
(Смотрите скрин)
Листинг программы
- Option Explicit
- Dim T As String
- Dim P As Long, d As Long, dm As Long
- Dim p1 As Long, p2 As Long
- Dim bul As Boolean
- Dim Q As Double
- Const p8 = 100000000
- Private Sub txtT_Change()
- T = txtT.Text
- If Len(T) > 8 Then
- p1 = Val(Left(T, Len(T) - 8))
- p2 = Val(Right(T, 8))
- If p2 Mod 2 = 0 Then bul = False: GoTo 555
- Q = p1 * CDbl(p8) + p2
- dm = Sqr(Q) + 1
- For d = 3 To dm Step 2
- P = p8 Mod d
- Do While p1 > 0
- P = ((p1 Mod 10) * P) Mod d
- p1 = p1 \ 10
- Loop
- P = (P + p2) Mod d
- If P = 0 Then bul = False: GoTo 555
- Next d
- bul = True: GoTo 555
- Else
- P = Val(T)
- If P = 1 Then bul = False: GoTo 555
- If P = 2 Or P = 3 Then bul = True: GoTo 555
- If P Mod 2 = 0 Then bul = False: GoTo 555
- dm = Sqr(P) + 1
- For d = 3 To dm Step 2
- If P Mod d = 0 Then bul = False: GoTo 555
- Next d
- bul = True: GoTo 555
- End If
- 555
- If bul Then txtT.ForeColor = vbRed Else txtT.ForeColor = vbBlack
- End Sub
Решение задачи: «Простое число или нет?»
textual
Листинг программы
- Function PrimeFact$(s$) 'число передается в виде текстовой строки, т.к. тип Double не может содкржать более 15 значащих цифр
- Dim i&, txt$, n
- n = CDec(s)
- i = 2
- While CDec(i) * i <= n
- If Fix(n / i) <> n / i Then
- If i = 2 Then i = i + 1 Else i = i + 2
- Else
- n = Fix(n / i)
- txt = txt & "*" & i
- End If
- Wend
- If txt = "" Then PrimeFact = "Prime" Else PrimeFact = Mid$(txt, 2) & "*" & n
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д