← Назад к вопросам

Какие знаешь примитивы GCD?

2.0 Middle🔥 91 комментариев
#Асинхронность и многопоточность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Примитивные типы данных в контексте GCD

В Python есть несколько примитивных типов, которые используются при вычислении наибольшего общего делителя (GCD):

Целые числа (int)

Основной примитивный тип для работы с GCD:

import math

# Встроенная функция
result = math.gcd(48, 18)  # 6

# Реализация алгоритма Евклида
def gcd(a: int, b: int) -> int:
    while b:
        a, b = b, a % b
    return a

print(gcd(48, 18))  # 6

Типы данных, поддерживаемые GCD

int — основной примитив:

  • Неограниченная точность
  • Поддержка отрицательных чисел
  • Встроенная функция math.gcd() работает только с целыми числами

float — не поддерживается напрямую:

  • math.gcd() выбросит TypeError
  • Нужна предварительная конвертация
# Неправильно
math.gcd(5.5, 3.3)  # TypeError

# Правильно
from fractions import Fraction
f1 = Fraction(5.5).limit_denominator()
f2 = Fraction(3.3).limit_denominator()

bool — подтип int в Python:

math.gcd(True, False)  # 1 (True = 1, False = 0)
math.gcd(True, True)   # 1

Работа с несколькими числами (Python 3.9+)

from functools import reduce
import math

numbers = [48, 18, 24, 36]
result = reduce(math.gcd, numbers)  # 6

GCD для дробей

from fractions import Fraction

# GCD знаменателей и числителей
f1 = Fraction(6, 9)   # 2/3
f2 = Fraction(4, 12)  # 1/3

print(math.gcd(f1.numerator, f1.denominator))  # 3

Примитивные операции в алгоритме Евклида

Основные операции, которые работают с примитивами:

  • Присваивание — присваивание переменным
  • Деление по модулю — операция модуля (работает быстрее всего)
  • Вычитание — альтернативный способ
  • Сравнение — условие цикла
# Версия через вычитание
def gcd_subtraction(a: int, b: int) -> int:
    while a != b:
        if a > b:
            a = a - b
        else:
            b = b - a
    return a

Асимптотическая сложность

  • math.gcd() — O(log(min(a, b)))
  • Реализация на C-уровне
  • Оптимизирована для больших чисел

Вывод: примитивным типом для GCD в Python является int. Все остальные типы либо не поддерживаются, либо требуют предварительной конвертации.