Ein Polynom teilbar durch einen Faktor , (x-n)
wenn f(n)=0
für eine Funktion f
. Ihre Aufgabe: festzustellen, ob eine Polynomfunktion f(x)
durch teilbar ist (x-n)
.
Die Eingabe
Die Eingabe erfolgt in Form von (x-n), (Polynomial)
. Denken Sie daran, wenn n negativ ist, (x-n)
liegt es in der Eingabeform von vor(x+n)
. Für das Polynom werden alle Exponenten als eingegeben ^
. Koeffizienten werden neben der Variablen geschrieben x
. Ein Beispielpolynom könnte sein 2x^2 + x^1
. Es wird keine Leerzeichen zwischen irgendetwas geben. Der Begriff x
wird eingegeben als x^1
. Also, wie "normal" aussehen würde, (x - 1)
wird es sein (x^1-1)
. Die Koeffizienten und Potenzen sind immer ganze Zahlen. Der Koeffizient eins ist implizit, wenn er gerecht ist x
. Dh x
kann interpretiert werden als1x
Die Ausgabe
Ein boolescher Wert. Wahrheit oder Falsey.
Danke an @AlexA. Um mir zu helfen, das zu klären!
Beispiele
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
Regeln
- Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes
Leider weiß ich nicht, wie ich die Snippet-Bestenliste implementieren soll. Wenn jemand weiß wie, zögern Sie nicht, den Beitrag zu bearbeiten.
quelle
Antworten:
Pyth - 39 Bytes
Dies ist eine monströse Kombination aus Regexp und Eval. Ich mag den Ansatz, werde aber versuchen, die Implementierung zu verbessern.
Es verwendet den Polynom-Restsatz .
Funktioniert aufgrund der evalen Verwendung nicht online.
quelle
Casio Basic, 19 Bytes
Wie sich herausstellt, kann der fx-CP400
mod
algebraische Ausdrücke verarbeiten!Polynom und Faktor sollten als Ausdrücke eingegeben werden. 16 Bytes für den Code, 3 Bytes für die Eingabe
a,b
in das Parameterwertfeld.quelle
MATLAB,
103 99 97 9593 BytesIch probiere verschiedene Dinge aus und habe dies zum Laufen gebracht, um ein paar Bytes zu sparen:
Wenn ich das noch weiter reduzieren kann, werde ich eine Erklärung veröffentlichen.
Alter Code eine Erklärung
Dies funktioniert auch mit Octave . Sie können es online versuchen . Ich habe das Programm als Skript mit dem Namen gespeichert
isFactor.m
, sodass Sie es einfachisFactor
an der Eingabeaufforderung eingeben können . [Hinweis: In Octave wird beim Ausführen eine Warnung ausgegeben - MATLAB generiert diese nicht].Die Eingabe muss im Format
'(x^1+7),(x^2-49)'
gemäß der Frage erfolgen. Die Anführungszeichen werden hinzugefügt, damit MATLAB / Octave weiß, dass es sich um eine Zeichenfolge handelt.Die Ausgabe ist entweder a
0
oder a,1
je nachdem, ob sie wahr oder falsch ist.Der Code funktioniert also wie folgt. Zuerst fordern wir eine Eingabe an und analysieren sie dann. Die Analysezeichenfolge extrahiert die vorzeichenbehaftete Zahl nach der ersten
(x^1
in der Zeichenfolge - dies ist unser Wert vonn
. Dann wird der String (%s
) nach dem),
in der Eingabe weiter extrahiert - dies ist unser Ausdruck.Als nächstes extrahieren wir den Wert von
n
und setzen ihnx
gleich - wir werden bewerten, ob der Ausdruck wann gleich Nulln==x
ist. Deshalb speichern wir den Wert in x. Außerdem negieren wir die extrahierte Zahl aufgrund des Minuszeichens beim Parsen.Wir werden dann die Ausgabe anzeigen, die ein Boolescher Wert ist
Die Ausgabe ist im Grunde die logische Negation unserer bewerteten Gleichung. Wenn
f(x)
Null ist, wird 1 zurückgegeben, andernfalls wird Null ausgegeben.Wir evaluieren den Eingabeausdruck, aber um dies zu tun, müssen wir ihn leicht neu formatieren, damit MATLAB ihn verstehen kann. Wenn wir die Zeichenfolge lesen, handelt es sich tatsächlich um ein Array vom
double
Typ, daher müssen wir diese in ein Zeichenarray konvertieren. Vor der Konvertierung werden wir auch das erste Element entfernen, da wir dafür verwendet habenn
. Wir müssen dann jedes Vorkommenx
, dem eine Zahl (z. B.4x
) vorangestellt ist, durch dasselbe ersetzen , jedoch durch ein Multiplikationszeichen (*
) dazwischen, damit MATLAB es berechnen kann.quelle
VBScript,
118116 BytesDa wir wissen, dass der erste Teil der Eingabe ein lineares Polynom ist, müssen wir nur prüfen, ob seine Wurzel mit der des zweiten Polynoms übereinstimmt. und wir müssen den Begriff vorbereiten,
eval
indem wir ihn nach Bedarf einfügen*
.quelle
Axiom
77180 Bytesdie vorherige Lösung
war falsch, weil es Grad (b)> = Grad (a) einen Fehler voraussetzt, den ich geschrieben habe ... Test und Ergebnisse
quelle