Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2017, 18:13   #1
KonraDgeo
 
Регистрация: 08.01.2017
Сообщений: 6
По умолчанию НОД двух многочленов

Доброе время суток
Столкнулся с проблемой во время написания функции по нахождению НОД двух многочленов. Мой вариант ниже:
Код:
	def gcd(self,pol):
		spol = self
		while spol.deg>1:
			spol,pol=pol,spol%pol
		return spol
Подразумевается, что spol - больший (по степени) многочлен
Вот как перегружен остаток от деления:
Код:
def __mod__(self, pol):
		new_list = list(self.coeffs)
		mod = Polynom(new_list)
		div = Polynom([0.] * (self.deg - pol.deg + 1))

		while mod.deg >= pol.deg:
			k = mod.deg - pol.deg
			a = mod.coeffs.pop()
			mod.deg -= 1
			div.coeffs[k] = a / pol.coeffs[-1]

			for i in range(k, mod.deg + 1):
				mod.coeffs[i] -= a * pol.coeffs[i - k]
			mod.remove_trailing_zeros()
		return mod
Заранее спасибо
KonraDgeo вне форума Ответить с цитированием
Старый 04.02.2017, 18:17   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так проблема-то в чем?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.02.2017, 18:22   #3
KonraDgeo
 
Регистрация: 08.01.2017
Сообщений: 6
По умолчанию

Считает неправильно. Не могу понять, где ошибка
KonraDgeo вне форума Ответить с цитированием
Старый 05.02.2017, 19:54   #4
KonraDgeo
 
Регистрация: 08.01.2017
Сообщений: 6
По умолчанию

Все, я во всем наконец-то разобрался
Если кому интересно, внизу решение:
Код:
def __mod__(self, pol):
		mod = Polynom(list(self.coeffs))
		div = Polynom([0.]*(self.deg-pol.deg+1))
		
		while mod.deg>=pol.deg:
			k = mod.deg-pol.deg
			a = mod.coeffs[-1]/pol.coeffs[-1]
			div.coeffs[-k]=a
	
			for i in range(pol.deg,-1,-1):
				mod.coeffs[i+k]-=a*pol.coeffs[i]
				
			mod.remove_trailing_zeros()
		return mod

def gcd(self,pol):
		spol = self
		while pol.deg!=0:
			buff = pol
			spol,pol=pol,spol%pol
			if pol.coeffs == []:
				pol = buff
				break
		return pol
KonraDgeo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложение, умножение, НОД многочленов vasektemuprosek Паскаль, Turbo Pascal, PascalABC.NET 15 07.01.2013 13:11
Деление многочленов от двух переменных Бинари Помощь студентам 0 16.12.2011 20:02
Нахождение НОД двух чисел awlol Помощь студентам 2 28.11.2010 22:52
Деление двух многочленов, Паскаль r00tus Помощь студентам 3 04.03.2010 19:53
вычисление НОД из двух чисел street-walker Помощь студентам 2 19.05.2009 20:40