ОСОАИ
Тема: Сандар теориясы жана саноо
системалары: өркүндөтүлгөн анализ.
Предмет: Информатика боюнча предметтик маселелерди чыгаруу .
Группа: ФМО(б) 1-24
Аткарган: Мизаева Тансулуу
Текшерген: Исаева Аида
Тема: Сандар теориясы жана саноо системалары: өркүндөтүлгөн анализ.
Узун арифметика деген эмне ?
Узун арифметика (Big Integer Arithmetic) — бул кадимки компьютердеги сандык типтер менен иштелип чыккандан чоң сандарды (мисалы, 50, 100, же 1000 цифралуу) эсептоо ыкмасы.
Программалоо тилиндеги кадимки int, long, double сыяктуу типтердин мааниси белгилүү чектен ашпайт. Мисалы:
int → 2,147,483,647 чейин
long → 9,223,372,036,854,775,807 чейин
Эгер бизге 100 орундуу санды эсептөө керек болсо — бул типтер жетишсиз.
Мындай учурда сандарды сап (string) түрүндө сактап, ар бир цифраны өзүнчө иштетүү керек болот.
Саноо системалары — бул белгилердин жардамы менен сандарды көрсөтүүнүн эрежеси.
Негизги түрлөрү:
| Саноо системасы | Негиз | Мисал |
| Ондук (Decimal) | 10 | 0–9 |
| Экилик (Binary) | 2 | 0, 1 |
| Сегиздик (Octal) | 8 | 0–7 |
| Он алтылык (Hexadecimal) | 16 | 0–9, A–F |
Мисалы: Ондук: 125
Экилик: 1111101
Он алтылык: 7D
Узун арифметикада көбүнчө ондук система колдонулат, бирок алгоритм бардык системалар үчүн бирдей логика менен иштейт.
Узун сандарды кошуу алгоритми
Идеясы:
Сандарды оңдон солго карай (акыркы цифрадан баштап) кошобуз.
Ар бир кадамда “эстеп калуу” маанисин сактайбыз (мисалы, 9+8 = 17 болсо, 7 жазабыз, 1ди эстейбиз).
Мисалы: 98765432109876543210
+ 12345678901234567890
Алгоритм кадамдары:
Сандарды тең узундукта кылып солдон нөлдөр менен толуктоо.
Акыркы цифрадан баштап кошуу:
Натыйжа цифраны жыйынтык сапка кошуу.
Эгер “carry” калган болсо, жыйынтыкка кошуу.
Узун сандарды кошуу функциясы
def add_large_numbers(a, b):
a = a[::-1]
b = b[::-1]
result = []
carry = 0
for i in range(max(len(a), len(b))):
x = int(a[i]) if i
y = int(b[i]) if i
s = x + y + carry
result.append(str(s % 10))
carry = s // 10
if carry:
result.append(str(carry))
return ''.join(result[::-1])
# Мисал
a = "987654321098765432109876543210"
b = "123456789012345678901234567890"
print("Кошуунун жыйынтыгы:", add_large_numbers(a, b))
Узун сандарды көбөйтүү алгоритми
Идеясы: кадимки кол менен көбөйткөндөй ыкма.
Ар бир цифраны экинчи сандагы ар бир цифрага көбөйтүп, орун (индекс) боюнча жылдырып кошобуз.
Мисалы:
123
x 45
------
615 (123 * 5)
+ 4920 (123 * 4, солго 1 орун жылган)
------
5535
Алгоритм:
Натыйжа катары нөлдөргө толгон массив түзүү (узундугу = len(a) + len(b)).
Ар бир цифраны тескери тартипте көбөйтүү.
Ар бир натыйжаны туура орунга жайгаштыруу.
Эстеп калуу (carry) маанисин кошуу.
Алдыдагы нөлдөрдү алып салуу.
Узун сандарды көбөйтүү функциясы
def multiply_large_numbers(a, b):
+a a= a[::-1]
b = b[::-1]
result = [0] * (len(a) + len(b))
for i in range(len(a)):
for j in range(len(b)):
result[i + j] += int(a[i]) * int(b[j])
if result[i + j] = 10:
result[i + j + 1] += result[i + j] // 10
result[i + j] %= 10
while len(result) 1 and result[-1] == 0:
result.pop()
return ''.join(map(str, result[::-1]))
# Мисал
a = "12345678901234567890"
b = "98765432109876543210"
print("Көбөйтүүнүн жыйынтыгы:", multiply_large_numbers(a, b))
Натыйжа:
Бул программа 50, 100 же андан көп цифралуу сандар менен иштей алат.
Python’до бул үчүн int типи жетиштүү, бирок алгоритмди өз колубуз менен жазуу — арифметиканын логикасын терең түшүнүүгө жардам берет.
Жыйынтык:
| Операция | Натыйжа | Түшүндүрмө |
| Кошуу | Чоң сандарды цифра боюнча кошот | Эстеп калуу колдонулат |
| Көбөйтүү | Ар бир цифраны башкасына көбөйтөт | Натыйжа орун боюнча жылат |