Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [Pascal] Целые корни полинома |
Автор: Stroks 21.12.2006, 21:42 |
Дан многочлен вида: x^n + a1*(x^(n-1)) + a2*(x^(n-2)) + .... + a(n-1)*(x^1) + an = 0 Где n - значение степени уравнения, a1...an - коэффициенты, которые задаются пользователем с клавиатуры. n<=10 Учитывая, что корни данного многочлена находятся в разложении свободного коэффициена (an), выведите на экран все целые корни. часть алгоритма должна быть такая: for i:=1 to an do if mod(an/i)=0 then подставляем это "i" вместо икса в многочлен. Если он при этом значении "i" обращается в ноль, тогда нужно вывести его на экран. Решите пожалуйста, нужно к утру. ICQ: 303-72-72-75 |
Автор: Kuvaldis 22.12.2006, 05:18 | ||
Stroks, Быстрая версия программы, используется схема Горнера, оптимизация по выборке делителей (просмотр только до корень из длины). Оптимизация при проверке на корень. Коротко поясню. Сначала проверяем, являются ли 1 и -1 корнями полинома. Это просто, нужно сложить определенным образом коэффициенты. Допустим, что А - корень. значит f(x) = (x - A) * q(x) q(x) - целый полином, значит q(1) и й(-1) - целые числа. Но тогда f(1) = - (A - 1) * q(1), f(-1) = - (A + 1) * q(-1) Значит, А - 1 и А + 1 соотвественно делят f(1) и а(-1) Это значит, что из делителей А (А <> =-1) свободного члена для проверки и непосредственного вычисления значения нужно выбирать числа, для которых f(1) / (A - 1) f(-1) / (A + 1) - целые числа Теперь сама программа
|
Автор: Stroks 22.12.2006, 23:12 |
Не работает. Точнее работает, но неправильно. И то, что ты написал перед программой - непонятно. Ты полагаешь x равным 1 и -1, но говоришь, что корень - это A. Тогда x нужно оставить. ![]() |
Автор: Kuvaldis 22.12.2006, 23:28 | ||||
Stroks,
Дай мне тест, на котором программа легла (на моих всех работает)
Сначала проверили на корень числа 1 и -1 Но нужно же проверить и остальные делители свободного члена. Поэтому и написано "допустим, что корень - это А". Т.е. неединичный делитель |