Многочлен делится на множитель, (x-n)
если f(n)=0
для функции f
. Ваша работа: определить, f(x)
делится ли полиномиальная функция на (x-n)
.
Вход
Вход в форме (x-n), (Polynomial)
. Помните, если n отрицательно, (x-n)
будет в форме ввода(x+n)
. Для полинома все показатели будут указаны как ^
. Коэффициенты будут записаны рядом с переменной x
. Пример полинома может быть 2x^2 + x^1
. Там не будет пробелов между чем-либо. Термин x
будет введен как x^1
. Так что, как обычно, (x - 1)
будет выглядеть (x^1-1)
. Коэффициенты и степени всегда будут целыми числами. Коэффициент один будет неявным, если он справедлив x
. Т.е. x
можно интерпретировать как1x
Выход
Булево значение. Правда или Ложь.
Спасибо @AlexA. Для того, чтобы помочь мне уточнить это!
Примеры
Input:(x^1-1),(x^1-1)
Output: True
Input: (x^1+2),(2x^2+4x^1+2)
Output: False
Input: (x^1+7),(x^2-49)
Output: True
правила
- Это код-гольф , поэтому выигрывает самый короткий код в байтах
К сожалению, я не знаю, как реализовать список лидеров сниппетов. Если кто-нибудь знает, как, не стесняйтесь редактировать пост.
источник
Ответы:
Pyth - 39 байт
Это чудовищное сочетание регулярного выражения и eval. Мне нравится подход, но я постараюсь улучшить реализацию.
Он использует теорему о полиномиальных остатках .
Не работает в сети из-за использования eval.
источник
Casio Basic, 19 байтов
Как выясняется, fx-CP400 может работать
mod
с алгебраическими выражениями!Полином и фактор должны быть введены как выражения. 16 байтов для кода, 3 байта для ввода
a,b
в поле значения параметра.источник
MATLAB,
103 99 97 9593 байтаЯ пробую разные вещи, и получил это на работу, чтобы сэкономить пару байтов:
Если я смогу уменьшить это еще больше, я опубликую объяснение.
Старый код объяснение
Это также работает с Octave . Вы можете попробовать это онлайн . Я сохранил программу в виде скрипта с именем
isFactor.m
, так что вы можете просто войтиisFactor
в командной строке. [Примечание: в Octave выдает предупреждение во время работы - MATLAB не генерирует это].Входные данные должны быть в формате
'(x^1+7),(x^2-49)'
согласно вопросу. Кавычки добавляются, поэтому MATLAB / Octave знает, что это строка.Вывод либо a,
0
либо a в1
зависимости от того, является ли он истинным или ложным.Итак, код работает следующим образом. Сначала мы запрашиваем ввод, а затем анализируем его. Строка синтаксического анализа извлекает число со знаком после первого
(x^1
в строке - это наше значениеn
. Затем он продолжает извлекать строку (%s
) после),
входных данных - это наше выражение.Затем мы извлекаем значение
n
и устанавливаем егоx
равным - мы собираемся оценить, равно ли выражение, когда равен нулюn==x
, поэтому мы сохраняем значение в x. Также мы отменяем извлеченное число из-за знака минус при разборе.Затем мы отобразим вывод, который является логическим
Результатом является в основном логическое отрицание нашего оцененного уравнения. Если
f(x)
ноль, это возвратит 1, иначе это приведет к нулю.Мы оцениваем входное выражение, но для этого нам нужно немного его переформатировать, чтобы MATLAB мог понять. Когда мы читаем строку, это на самом деле массив
double
типа, поэтому нам нужно преобразовать его в массив символов. Перед преобразованием мы также избавляемся от первого элемента, потому что именно это мы и использовалиn
. Затем нам нужно заменить любое вхождение,x
которому предшествует число (например4x
), на то же самое, но со*
знаком умножения ( ) между ними, чтобы MATLAB мог его вычислить.источник
VBScript,
118116 байтовПоскольку мы знаем, что первая часть входных данных является линейным полиномом, нам нужно только проверить, совпадает ли его корень с корнем второго полинома; и нам нужно подготовить термин
eval
, вставив по*
мере необходимости.источник
Аксиома
77180 байтпредыдущее решение
был неправ, потому что предполагал степень (b)> = степень (а) одна ошибка, которую я написал ... тест и результаты
источник