В качестве первого примера рассмотрим реализацию алгоритма Евклида нахождения наибольшего общего делителя двух чисел. Интерфейс программы представлен на рисунке.
Вычисление наибольшего общего делителя происходит в обработчике щелчка на кнопке "Вычислить".
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, t As Long
a = TextBox1.Text
b = TextBox2.Text
While b > 0
t = a Mod b
a = b
b = t
End While
TextBox3.Text = a
End Sub
Следующий пример демонстрирует эффективный алгоритм возведения в целочисленную степень. Интерфейс программы представлен на рисунке.
Возведение в степень происходит в обработчике щелчка на кнопке "Возвести".
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, c As Long
Dim n, k As Integer
a = TextBox1.Text
n = TextBox2.Text
k = n
b = 1
c = a
'Инвариантом является
'a в степени n = b * (c в степени k)
'Перед циклом (a в степени n = c в степени n)
While k > 0
If k Mod 2 = 0 Then
'c в степени k = (c * c) в степени (k \ 2)
k = k \ 2
c = c * c
Else
'Один множитель c переходит в b
k = k - 1
b = b * c
End If
End While
'После цикла (a в степени n = b)
TextBox3.Text = b
End Sub
Важно отметить что этот алгоритм может использоваться не только для возведения в целочисленную степень целых чисел, но и других математических объектов, например, матриц.
Следующая программа позволяет вычислить простые множители заданного числа. Ее графический интерфейс представлен на следующем рисунке.
Нахождение множителей осуществляется с помощью следующего алгоритма.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n, k, m As Long
Dim s As String
n = TextBox1.Text
s = ""
k = n
'Инвариант - произведение напечатанных чисел и k равно n
While k > 1
m = 2
'Инвариант - k не имеет делителей в интервале (1, m)
While k Mod m > 0
m = m + 1
End While
'm - наименьший делитель k больший 1,
'следовательно, простой
s = s & m & ", "
k = k \ m
End While
s = s.Substring(0, s.Length - 2)
TextBox2.Text = s
End Sub