You are on page 1of 4

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ТЕРНОПІЛЬСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ


ІМЕНІ ІВАНА ПУЛЮЯ

Кафедра комп’ютерних наук

ЗВІТ
до лабораторної роботи №1
на тему: “Множення великих чисел методом Карацуби”
з дисципліни “Теорія алгоритмів”

Виконала:
студентка групи СН-22
Мельничук О. С.
Перевірив:
Михайлович Т. В.

Тернопіль 2022
Тема: множення великих чисел методом Карацуби
Мета: ознайомитися з множенням великих чисел методом Карацуби.
Завдання: створити програму для перемноження великих чисел методом
Карацуби та виконати два практичних завдання.
Хід роботи
1. Створюємо програму на Python. Код наведений нижче:
import math
amount_105 = 0
amount_72 = 0
amount_12 = 0
def Karatzuba(x, y):
x = str(x)
y = str(y)
len_x = len(x)
len_y = len(y)
global amount_105, amount_72, amount_12
n = max(len_x, len_y)
if n == 1:
return int(x) * int(y)
half_n = n // 2
divider_x = len_x - half_n
divider_y = len_y - half_n
a = x[0:divider_x]
b = x[divider_x:len_x]
c = y[0:divider_y]
d = y[divider_y:len_y]
if a == '':
a = 0
if b == '':
b = 0
if c == '':
c = 0
if d == '':
d = 0
ac = Karatzuba(a, c)
bd = Karatzuba(b, d)
multiply = Karatzuba(int(a) + int(b), int(c) + int(d)) #
(a+b)*(c+d)
ad_plus_bc = multiply - ac - bd # (a+b)*(c+d)-a*c-b*d
if ad_plus_bc == 105:
amount_105 += 1
if ad_plus_bc == 72:
amount_72 += 1
if ad_plus_bc == 12:
amount_12 += 1
result = ac * pow(10, 2 * half_n) + pow(10, half_n) * ad_plus_bc
+ bd
return int(result)
if __name__ == "__main__":
x =
'1685287499328328297814655639278583667919355849391453456921116729'
y =
'7114192848577754587969744626558571536728983167954552999895348492'
result = Karatzuba(x, y)
print("Добуток X та Y = " + str(result))
print(f'\n105: {amount_105} раз \n72: {amount_72} раз \n12:
{amount_12} раз')
2.    Перевірка на правильність роботи коду шляхом виконання двох
практичних завдань, які наведені нижче.
Умова практичного завдання №1, а також відповідь на нього подані на
рисунку 1.

Рис. 1 – Практичне завдання №1


Умова практичного завдання №2, а також відповідь на нього подані на
рисунку 2.

Рис. 2 – Практичне завдання №2

Висновок: Під час виконання лабораторної роботи я ознайомилася з


множенням великих чисел методом Карацуби.

You might also like