Bestimmen Sie bei einem gegebenen Polynom, ob es eine Primzahl ist.
Ein Polynom ist ax^n + bx^(n-1) + ... + dx^3 + ex^2 + fx + g
, wo jeder Term eine konstante Zahl (der Koeffizient) multipliziert mit einer nichtnegativen ganzzahligen Potenz von ist x
. Die höchste Leistung mit einem Koeffizienten ungleich Null wird als Grad bezeichnet. Für diese Herausforderung betrachten wir nur Polynome von mindestens Grad 1. Das heißt, jedes Polynom enthält einige x
. Außerdem verwenden wir nur Polynome mit ganzzahligen Koeffizienten.
Polynome können multipliziert werden. Zum Beispiel ist (x+3)(2x^2-2x+3)
gleich 2x^3+4x^2-3x+9
. Somit 2x^3+4x^2-3x+9
kann in einkalkuliert werden x+3
und 2x^2-2x+3
, so es Verbund ist.
Andere Polynome können nicht berücksichtigt werden. Beispielsweise 2x^2-2x+3
ist nicht das Produkt von zwei Polynomen (Ignorieren von konstanten Polynomen oder solchen mit nicht ganzzahligen Koeffizienten). Daher ist es prim (auch als irreduzibel bekannt).
Regeln
- Die Ein- und Ausgabe kann auf jedem Standardweg erfolgen.
- Die Eingabe kann eine Zeichenfolge
2x^2-2x+3
, eine Liste von Koeffizienten{2,-2,3}
oder ein ähnliches Mittel sein. - Die Ausgabe ist entweder ein wahrer Wert, wenn es sich um einen Primwert handelt, oder ein falscher Wert, wenn es sich um einen zusammengesetzten Wert handelt. Sie müssen für alle Primzahlen den gleichen Wahrheitswert und für alle zusammengesetzten Polynome den gleichen Falsey-Wert liefern.
- Die Eingabe hat mindestens Grad 1 und höchstens Grad 10.
- Sie dürfen keine eingebauten Werkzeuge zur Faktorisierung (von ganzen Zahlen oder Ausdrücken) oder zum Lösen von Gleichungen verwenden.
Beispiele
True - Prime
x+3
-2x
x^2+x+1
x^3-3x-1
-2x^6-3x^4+2
3x^9-8x^8-3x^7+2x^3-10
Falsch - zusammengesetzt
x^2
x^2+2x+1
x^4+2x^3+3x^2+2x+1
-3x^7+5x^6-2x
x^9-8x^8+7x^7+19x^6-10x^5-35x^4-14x^3+36x^2+16x-12
Antworten:
Mathematica, 224 Bytes
Erklärung :
Hier wird die Methode von Kronecker angewendet. Diese Methode erzeugt bestimmte Polynome niedrigeren Grades und prüft, ob ein Faktor des ursprünglichen Polynoms existiert.
Testfälle :
Es dauert 14s auf meinem Laptop, um zu schließen, dass
3x^9-8x^8-3x^7+2x^3-10
Prime ist.quelle
PARI / GP, 16 Bytes, billig wie die Hölle
Aus irgendeinem Grund wurde dies nicht abgelehnt (mit der Bemerkung, dass der Befehl nicht faktorisiert oder durch Gleichungen gelöst werden kann):
Testfall
gibt zurück
1
(true). Die anderen Beispiele funktionieren ähnlich.Um zu zeigen, dass dies auf die harte Tour lösbar ist, finden Sie hier eine vollständige Lösung.
Weniger billig, aber langsam
Es macht wirklich keinen Sinn, das zu spielen.
Bearbeiten: Kommentatoren haben darauf hingewiesen, dass die erste Methode durch guten Geschmack, den Geist der Regeln, die Genfer Konvention, Standard-Regelungslücke, etc. nicht erlaubt sein kann. Ich bin nicht einverstanden, aber auf jeden Fall habe ich die zweite Version zusammen mit gepostet die erste und sicherlich scheint es akzeptabel.
quelle
x^4+1
(was bekanntermaßen für jede Primzahl reduzierbar ist) in 86 Millisekunden nicht reduzierbar ist. Wenn nichts anderes kann andere diese Version anpassen und Golf spielen.