В качестве первого примера рассмотрим реализацию алгоритма Евклида нахождения наибольшего общего делителя двух чисел. Интерфейс программы представлен на рисунке.
Вычисление наибольшего общего делителя происходит в обработчике щелчка на кнопке "Вычислить".
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