Wielomian jest podzielny przez współczynnik, (x-n)
jeśli f(n)=0
dla funkcji f
. Twoje zadanie: ustalenie, czy funkcja wielomianowa f(x)
jest podzielna przez(x-n)
.
Dane wejściowe
Dane wejściowe mają postać (x-n), (Polynomial)
. Pamiętaj, jeśli n jest ujemne, (x-n)
będzie miało postać wejściową(x+n)
. W przypadku wielomianu wszystkie wykładniki zostaną wstawione jako ^
. Współczynniki zostaną zapisane obok zmiennej x
. Przykładowym wielomianem może być 2x^2 + x^1
. Nie będzie między nimi żadnych odstępów. Termin x
zostanie wprowadzony jako x^1
. Więc co by „normalnie” wyglądać (x - 1)
będzie (x^1-1)
. Współczynniki i moce zawsze będą liczbami całkowitymi. Współczynnik jeden będzie domyślny, jeśli jest sprawiedliwy x
. Tj. x
Można to interpretować jako1x
Wyjście
Wartość logiczna. Prawda lub Falsey.
Dzięki @AlexA. Za pomoc w wyjaśnieniu tego!
Przykłady
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
Zasady
- To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach
Niestety nie wiem, jak zaimplementować tabelę wyników. Jeśli ktoś wie jak, możesz edytować post.
źródło
Odpowiedzi:
Pyth - 39 bajtów
Jest to monstrualna kombinacja wyrażeń regularnych i eval. Podoba mi się to podejście, ale postaram się poprawić wdrożenie.
Korzysta z twierdzenia o wielomianowej reszcie .
Nie działa online z powodu ewaluacji.
źródło
Casio Basic, 19 bajtów
Jak się okazuje, fx-CP400 może to zrobić
mod
na wyrażeniach algebraicznych!Wielomian i czynnik należy wprowadzić jako wyrażenia. 16 bajtów na kod, 3 bajty na
a,b
pole wartości parametru.źródło
MATLAB,
103 99 97 9593 bajtówPróbuję różnych rzeczy i udało mi się zaoszczędzić kilka bajtów:
Jeśli mogę to jeszcze bardziej zmniejszyć, opublikuję wyjaśnienie.
Stary kod wyjaśnienie
Działa to również z Octave . Możesz spróbować online . Zapisałem program jako skrypt o nazwie
isFactor.m
, więc możesz po prostu wejśćisFactor
w linii poleceń. [Uwaga: w Octave wyrzuca ostrzeżenie podczas działania - MATLAB tego nie generuje].Dane wejściowe muszą mieć format
'(x^1+7),(x^2-49)'
zgodny z pytaniem. Znaki cudzysłowu są dodawane, aby MATLAB / Octave wiedział, że jest to ciąg znaków.Dane wyjściowe mają wartość a
0
lub1
zależną od tego, czy jest to prawda, czy fałsz.Tak więc kod działa w następujący sposób. Najpierw poprosimy o dane wejściowe, a następnie je przeanalizujemy. Ciąg parsujący wyodrębnia podpisany numer po pierwszym
(x^1
w ciągu - jest to nasza wartośćn
. Następnie kontynuuje wyodrębnianie string (%s
) po),
danych wejściowych - to jest nasze wyrażenie.Następnie wyodrębniamy wartość
n
i ustawiamyx
ją na równi - sprawdzimy, czy wyrażenie ma wartość zero, kiedyn==x
to dlatego przechowujemy wartość na x. Negujemy również wyodrębnioną liczbę ze względu na znak minus podczas analizy.Następnie wyświetlimy wynik, który jest wartością logiczną
Wynik jest w zasadzie logiczną negacją naszego ocenianego równania. Jeśli
f(x)
wynosi zero, to zwróci 1, w przeciwnym razie spowoduje zero.Oceniamy wyrażenie wejściowe, ale w tym celu musimy go nieco sformatować, aby MATLAB mógł to zrozumieć. Kiedy czytamy ciąg, jest to właściwie tablica
double
typu, więc musimy przekonwertować go na tablicę znaków. Przed konwersją pozbywamy się również pierwszego elementu, ponieważ do tego właśnie służyliśmyn
. Następnie musimy zastąpić każde wystąpienie,x
które jest poprzedzone liczbą (np.4x
), Tą samą rzeczą, ale przez znak mnożenia (*
), aby MATLAB mógł to obliczyć.źródło
VBScript,
118116 bajtówPonieważ wiemy, że pierwsza część danych wejściowych jest wielomianem liniowym, musimy tylko sprawdzić, czy jej pierwiastek odpowiada pierwiastkowi drugiego wielomianu; i musimy przygotować termin
eval
, wstawiając*
w razie potrzeby.źródło
Axiom
77180 bajtówpoprzednie rozwiązanie
było błędne, ponieważ zakładam stopień (b)> = stopień (a) jeden błąd, który napisałem ... test i wyniki
źródło