Найти в Дзене
Лина

Разложение числа на множители

В предыдущей статье был описан способ проверки чисел на простоту. Согласно которому, расчет выполняется в зависимости от того на какую цифру заканчивается проверяемое число А (см. рисунок). Используя данные уравнения можно написать программу для разложения любого числа на множители. Программа написана на Visual Basic. Sub разложение числа() Dim A As Long, a1 As Double, a2 As Double, b As Long, b1 As Long, b2 As Long, b3 As Long, c As Long, r As Long, p As Long, f As Double, k As Double, x As Long, y As Double, y1 As Long, y2 As Double, t As Long, t1 As Long, t2 As Long, t3 As Long, t4 As Long, t5 As Long, t6 As Long, t7 As Long A = InputBox("Введите число") a1 = A / 10 b = Fix(a1) c = A - 10 * b r = A p = A t = 1 Do While c = 2 Or c = 4 Or c = 6 Or c = 8 Or c = 0 p = r / 2 a1 = p / 10 b1 = Fix(a1) c = p - 10 * b1 r = p Loop t = A / p If t <> 1 Then MsgBox "кратно 2" t1 = 1 Do While c = 5 p = r / 5 a2 = p / 10 b2 = Fix(a2) c = p - 10 * b2 r = p Loop t1 = A / (p * t) If

В предыдущей статье был описан способ проверки чисел на простоту. Согласно которому, расчет выполняется в зависимости от того на какую цифру заканчивается проверяемое число А (см. рисунок).

Используя данные уравнения можно написать программу для разложения любого числа на множители. Программа написана на Visual Basic.

Sub разложение числа()
Dim A As Long, a1 As Double, a2 As Double, b As Long, b1 As Long, b2 As Long, b3 As Long, c As Long, r As Long, p As Long, f As Double, k As Double, x As Long, y As Double, y1 As Long, y2 As Double, t As Long, t1 As Long, t2 As Long, t3 As Long, t4 As Long, t5 As Long, t6 As Long, t7 As Long
A = InputBox("Введите число")
a1 = A / 10
b = Fix(a1)
c = A - 10 * b
r = A
p = A
t = 1
Do While c = 2 Or c = 4 Or c = 6 Or c = 8 Or c = 0
p = r / 2
a1 = p / 10
b1 = Fix(a1)
c = p - 10 * b1
r = p
Loop
t = A / p
If t <> 1 Then MsgBox "кратно 2"
t1 = 1
Do While c = 5
p = r / 5
a2 = p / 10
b2 = Fix(a2)
c = p - 10 * b2
r = p
Loop
t1 = A / (p * t)
If t1 <> 1 Then MsgBox "кратно 5"
f = r
Do
k = f / 3
b3 = Fix(k)
f = k
Loop While b3 = k
t2 = A / (f * 3 * t * t1)
If t2 <> 1 Then MsgBox "кратно 3"
If f <> r Then r = k * 3
f = r
Do
k = f / 7
b3 = Fix(k)
f = k
Loop While b3 = k
t3 = A / (f * 7 * t * t1 * t2)
If t3 <> 1 Then MsgBox "кратно 7"
If f <> r Then r = k * 7
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
Line:
y = 10
x = 1
Do While y >= 0 And c = 1
y = (r - 21 - 70 * x) / (100 * x + 30)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t4 = 10 * x + 3
If t4 <> 1 Then MsgBox t4
r = r / t4
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
y = 10
x = 1
Do While y >= 0 And c = 1
y = (r - 81 - 90 * x) / (100 * x + 90)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t4 = 10 * x + 9
If t4 <> 1 Then MsgBox t4
r = r / t4
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
y = 10
x = 1
Do While y >= 1 And c = 1
y = (r - 1 - 10 * x) / (100 * x + 10)
y1 = Fix(y)
y2 = 10 * y + 1
If y = y1 And r <> y2 And y <> 0 Then
t4 = 10 * x + 1
If t4 <> 1 Then MsgBox t4
r = r / t4
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
If c = 1 Then GoTo Line
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
line1:
y = 10
x = 1
Do While y >= 0 And c = 3
y = (r - 3 - 30 * x) / (100 * x + 10)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t5 = 10 * x + 1
If t5 <> 1 Then MsgBox t5
r = r / t5
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
If c = 3 Then GoTo line1
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
y = 10
x = 1
Do While y >= 0 And c = 3
y = (r - 63 - 90 * x) / (100 * x + 70)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t5 = 10 * x + 7
If t5 <> 1 Then MsgBox t5
r = r / t5
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
line2:
x = 1
y = 10
Do While y >= 0 And c = 7
y = (r - 7 - 70 * x) / (100 * x + 10)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t6 = 10 * x + 1
If t6 <> 1 Then MsgBox t6
r = r / t6
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
If c = 7 Then GoTo line2
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
y = 10
x = 1
Do While y >= 0 And c = 7
y = (r - 27 - 90 * x) / (100 * x + 30)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t6 = 10 * x + 3
If t6 <> 1 Then MsgBox t6
r = r / t6
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
line3:
x = 1
y = 10
Do While y >= 0 And c = 9
y = (r - 9 - 90 * x) / (100 * x + 10)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t7 = 10 * x + 1
If t7 <> 1 Then MsgBox t7
r = r / t7
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
If c = 9 Then GoTo line3
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
x = 1
y = 10
Do While y >= 0 And c = 9
y = (r - 9 - 30 * x) / (100 * x + 30)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t7 = 10 * x + 3
If t7 <> 1 Then MsgBox t7
r = r / t7
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
If c = 3 Then GoTo line1
Else:
End If
x = x + 1
Loop
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
x = 1
y = 10
Do While y >= 0 And c = 9
y = (r - 49 - 70 * x) / (100 * x + 70)
y1 = Fix(y)
If y = y1 Or y = 0 Then
t7 = 10 * x + 7
If t7 <> 1 Then MsgBox t7
r = r / t7
a1 = r / 10
b = Fix(a1)
c = r - 10 * b
If c = 7 Then GoTo line2
Else:
End If
x = x + 1
Loop
MsgBox r
End Sub

Данная программа имеет ряд недостатков. Главный недостаток – ограниченность вычислительной способности Visual Basic в excel. Для больших чисел необходимо переписывать программный код на других языках программирования. Для чисел кратных 2, 5, 3 и 7 количество этих чисел в программе не считается, так как их количество не является целью программы.