def DIV_ZZ_Z(number1, number2): """ Z-9 Частное от деления большего целого числа на меньшее или равное натуральное с остатком (делитель отличен от нуля) Власенко Владислав, 7305 """ # Определяем модули чисел m1 = ABS_Z_N(number1) m2 = ABS_Z_N(number2) # Частное от деления модулей m = DIV_NN_N(m1, m2) # Остаток от деления mod = MOD_NN_N(m1, m2) # Знаки исходных чисел p1 = POZ_Z_D(number1) p2 = POZ_Z_D(number2) # Если знаки одинаковые или одно из чисел ноль - результат положительный if p1 == p2 or p1 == 0 or p2 == 0: p = 0 else: p = 1 # Если делимое отрицательное и есть ненулевой остаток - # прибавляем к частному единицу if NZER_N_B(mod) and p1 == 1: m = ADD_1N_N(m) return [p, m[0], m[1]]
def SUB_ZZ_Z(number1, number2): """ Z-7 Вычитание целых чисел Колосюк Владислав, 7305 """ # Модули чисел m1 = ABS_Z_N(number1) m2 = ABS_Z_N(number2) # Знаки чисел p1 = POZ_Z_D(number1) p2 = POZ_Z_D(number2) # Если вычитаемое ноль, возвращаем копию уменьшаемое if p2 == 0: result = common.copy_Z(number1) # Если уменьщаемое ноль, результат - вычитаемое, умноженное на -1 elif p1 == 0: result = MUL_ZM_Z(number2) # Случай разных знаков elif p1 == 2 and p2 == 1 or p1 == 1 and p2 == 2: # Модулем числа будет являться сумма модулей, а знаком - знак первого # числа m = ADD_NN_N(m1, m2) p = number1[0] result = [p, m[0], m[1]] # Одинаковые знаки else: # Вычитаем из большего модуля меньший. Если первое число имеет больший # модуль, то результат будет иметь тот же знак, что и оно. if COM_NN_D(m1, m2) == 2: m = SUB_NN_N(m1, m2) p = number1[0] # Иначе - знак меняется else: m = SUB_NN_N(m2, m1) p = 0 if number1[0] == 1 else 1 result = [p, m[0], m[1]] return result
def INT_Q_B(number): """ Q-2 Проверка на целое, если число является целым, то True, иначе False Власенко Владислав, 7305 """ # НОД числителя и знаменателя gcf = GCF_NN_N(number[1], ABS_Z_N(number[0])) # Если НОД равен знаменателю - число целое result = COM_NN_D(gcf, number[1]) == 0 return result
def MUL_ZZ_Z(number1, number2): """ Z-8 Умножение целых чисел Царёв Александр, 7305 """ # Умножаем модули m1 = ABS_Z_N(number1) m2 = ABS_Z_N(number2) m = MUL_NN_N(m1, m2) # Если знаки одинаковые или одно из чисел ноль, то результат # неотрицательный p1 = POZ_Z_D(number1) p2 = POZ_Z_D(number2) if p1 == p2 or p1 == 0 or p2 == 0: p = 0 else: p = 1 return [p, m[0], m[1]]
def FAC_P_Q(polynom): """ P-7 Вынесение из многочлена НОК знаменателей коэффициентов и НОД числителей Ким Артём, 7305 """ # Берем модуль числителя и знаменатель старшего коэффициента n = ABS_Z_N(polynom[1][-1][0]) m = polynom[1][-1][1] # Для всех остальных ненулевых коэффициентов считаем НОД и НОК # с n и m соответственно и сохраняем их обратно в n и m for i in range(polynom[0]): if NZER_N_B(ABS_Z_N(polynom[1][i][0])): n = GCF_NN_N(ABS_Z_N(polynom[1][i][0]), n) m = LCM_NN_N(polynom[1][i][1], m) # Переводим НОД числителей из натурального в целое result = [TRANS_N_Z(n), m] return result
def ADD_ZZ_Z(number1, number2): """ Z-6 Сложение целых чисел Царёв Александр, 7305 """ # Модули чисел m1 = ABS_Z_N(number1) m2 = ABS_Z_N(number2) # Знаки чисел p1 = POZ_Z_D(number1) p2 = POZ_Z_D(number2) # Если одно из слогаемых равно нулю, то результат - второе слогаемое if p1 == 0: result = common.copy_Z(number2) elif p2 == 0: result = common.copy_Z(number1) # Если знаки одинаковые, складываем модули, сохраняем знак elif p1 == 2 and p2 == 2 or p1 == 1 and p2 == 1: m = ADD_NN_N(m1, m2) p = 0 if p1 == 2 else 1 result = [p, m[0], m[1]] # Разные знаки - из большего модуля вычитаем меньший и оставляем # знак числа с наибольшим модулем else: if COM_NN_D(m1, m2) == 2: m = SUB_NN_N(m1, m2) p = number1[0] else: m = SUB_NN_N(m2, m1) p = number2[0] result = [p, m[0], m[1]] return result
def DIV_QQ_Q(number1, number2): """ Q-8 Деление дробей Фёдорова Алиса, 7305 """ # Числитель - произведение числителя первой дроби и знаменателя второй n = MUL_ZZ_Z(number1[0], TRANS_N_Z(number2[1])) # Знаменатель - произведение числителя второй дроби и знаменателя первой m = MUL_ZZ_Z(TRANS_N_Z(number1[1]), number2[0]) if POZ_Z_D(m) == 0: raise Exception('Попытка деления на 0') # Если знаменатель отрицательный - домножаем числитель на -1 if POZ_Z_D(m) == 1: n = MUL_ZM_Z(n) # В знаменатель - модуль result = [n, ABS_Z_N(m)] return RED_Q_Q(result)
def RED_Q_Q(number): """ Q-1 Сокращение дроби Королев Андрей, 7305 """ result = [] # Определяется модуль числителя n = ABS_Z_N(number[0]) # Находится НОД a = GCF_NN_N(n, number[1]) # Числитель и знаменятель делятся на найденый ранее НОД # Перед делением НОД и знаменатель преобразуется из натурального в целое gcf = TRANS_N_Z(a) N = DIV_ZZ_Z(number[0], gcf) M = DIV_ZZ_Z(TRANS_N_Z(number[1]), gcf) # В результате новый знаменатель преобразуется из целого в натураьное result = [N, TRANS_Z_N(M)] return result