def polynom(string): tmp = string.replace(' ', '').replace('-', '|-').replace('+', '|+') tmp = tmp.split('|') result = [0, [common.rat_to_Q(0, 1)]] for p in tmp: if not p: continue if 'x' not in p: coef = rational(p) result[1][0] = ADD_QQ_Q(coef, result[1][0]) else: coef, deg = p.split('x') if deg: deg = int(deg) else: deg = 1 if coef: coef = rational(coef) else: coef = rational('1') while result[0] < deg: result[0] += 1 result[1].append(common.rat_to_Q(0, 1)) result[1][deg] = ADD_QQ_Q(coef, result[1][deg]) return result
def DIV_PP_P(polynom1, polynom2): """ P-9 Частное от деления многочлена на многочлен при делении с остатком Хафизов Ильназ, 7305 """ # Степень результата = разность степеней исходных многочленов result_deg = polynom1[0] - polynom2[0] if result_deg < 0: result = [0, [common.rat_to_Q(0, 1)]] else: result = [result_deg, []] tmp = common.copy_P(polynom1) for i in range(result_deg + 1): # Делим i-ый коэффициент остатка на старший коэффициент делителя # Получаем i-ый коэффициент частного if tmp[0] < polynom1[0] - i: result[1].insert(0, common.rat_to_Q(0, 1)) continue coef = DIV_QQ_Q(tmp[1][polynom1[0] - i], polynom2[1][-1]) result[1].insert(0, coef) # Домножаем делитель на 10^(разность степеней - i) sub = MUL_Pxk_P(polynom2, result_deg - i) # и вычитаем из остатка домножив на коэффициент tmp = SUB_PP_P(tmp, MUL_PQ_P(sub, coef)) return result
def rational(string): if '/' in string: return common.rat_to_Q( int(string.split('/')[0]), int(string.split('/')[1]), ) if string == '-': return common.rat_to_Q(-1, 1) if string == '+': return common.rat_to_Q(1, 1) return common.rat_to_Q(int(string), 1)
def SUB_PP_P(polynom1, polynom2): """ P-2 Вычитание многочленов Мартыненко Александр, 7305 """ # Копируем первый многочлен result = copy_P(polynom1) # Увеличиваем степень, если необходимо, добавляя # нулевые коэффициенты while result[0] < polynom2[0]: result[0] += 1 result[1].append(rat_to_Q(0, 1)) # Вычитаем коэффициенты i = 0 while i < polynom2[0] + 1: result[1][i] = SUB_QQ_Q(result[1][i], polynom2[1][i]) i += 1 # Пока старший коэффициент равен нулю, # понижаем степень и удаляем коэффициент down_p(result) # Возвращаем полученный многочлен return result
def GCF_PP_P(polynom1, polynom2): """ P-11 НОД многочленов Рэшин Даниил, 7305 """ one = polynom1 two = polynom2 # Алгоритм Евклида while DEG_P_N(two) > 0 or POZ_Z_D(two[1][0][0]) != 0: two, one = MOD_PP_P(one, two), two # Делим на старший коэффициент для получения единицы first = common.copy_Q(one[1][-1]) first = DIV_QQ_Q(common.rat_to_Q(1, 1), first) return MUL_PQ_P(one, first)