それは多項式の因子ですか?


11

関数の(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)。係数とべき乗は常に整数です。 係数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

ルール

  • これはなので、バイト単位の最短コードが優先されます

残念ながら、スニペットリーダーボードの実装方法がわかりません。誰かがその方法を知っているなら、投稿を自由に編集してください。


入力はその正確な形式の文字列、つまり除数候補の周りの括弧、ゼロまたは1つのスペースのカンマ、および多項式の周りの括弧です。
アレックスA.


間違いなくそれの複製ではありません。
intboolstring

@intrepidcoderこれは、問題が多項式を因数分解することではないため、重複ではありません。多項式を線形因子で除算できるかどうかを確認することです。
intboolstring

多項式係数は常に整数ですか?
デジタル外傷

回答:


5

パイス-39バイト

これは、正規表現とevalの巨大な組み合わせです。私はこのアプローチが好きですが、実装を改善しようとします。

多項式剰余定理を使用します。

K_sPe:z"-|\+"3!v.ssXPtw,\^\x,"**""*K"\*

evalを使用しているため、オンラインでは機能しません。


3

Casio Basic、19バイト

judge(mod(b,a)=0

判明したように、fx-CP400はmod代数式で実行できます!

多項式と因子は式として入力する必要があります。コード用に16バイトa,b、パラメーター値ボックスに入力する3バイト。


1

MATLAB、103 99 97 95 93バイト

私はいくつかの異なることを試していますが、これを機能させて数バイト節約しました:

eval([regexprep(input(''),{'.+?1(.+)\),','(\d)x'},{'x=str2num(''$1'');disp(~','$1\*x'}) 41]);

それをさらに減らすことができれば、説明を投稿します。


古いコードの説明

t=sscanf(input(''),'(x^1%d),%s')';x=-t(1);disp(~eval(regexprep([t(2:end) ''],'(\d)x','$1\*x')))

これはOctaveでも動作します。オンラインで試すことができます。プログラムをという名前のスクリプトとして保存したisFactor.mのでisFactor、プロンプトで入力するだけです。[注:Octaveでは、実行中に警告が表示されます-MATLABはこれを生成しません]。

入力'(x^1+7),(x^2-49)'は質問ごとの形式でなければなりません。MATLAB / Octaveが文字列であることを認識できるように、引用符が追加されます。

出力は、trueまたはfalseであるかどうかに応じて、a 0またはaになり1ます。


したがって、コードは次のように機能します。最初に入力を要求し、次にそれを解析します。解析文字列(x^1は、文字列の最初の後に符号付きの数値を抽出します-これはの値ですn。次に、入力の%s後に文字列()を抽出し続け),ます-これが式です。

t=sscanf(input(''),'(x^1%d),%s')';

次に、の値を抽出し、それに等しくn設定xします-式がwhen n==xに等しいかどうかを評価するのは、ですので、値をxに格納するのはこのためです。また、解析時のマイナス記号のため、抽出された数値を無効にします。

x=-t(1);

次に、ブール値である出力を表示します

disp(

出力は基本的に、評価された方程式の論理否定です。f(x)がゼロの場合、これは1を返し、そうでない場合はゼロになります。

     ~eval(

入力式を評価していますが、これを行うには、MATLABが理解できるようにわずかに再フォーマットする必要があります。文字列を読み取るとき、それは実際にはdouble型の配列であるため、それを文字配列に変換する必要があります。変換の前に、最初の要素も使用しnます。次に、MATLABが計算できるようにx、数字(たとえば4x)の前に同じものがあり、*その間に乗算()記号がある間に出現するものを置き換える必要があります。

           regexprep(char([t(2:end) ''],'(\d)x','$1\*x')
     )
)

1

VBScript、118 116バイト

a=inputbox(""):for i=0 to 9:a=replace(a,i&"x",i&"*x"):next:b=split(a,","):x=-eval(b(0)):msgbox not cbool(eval(b(1)))

入力の最初の部分は線形多項式であることがわかっているため、その根が2番目の多項式の根と一致するかどうかを確認するだけです。必要に応じevalて挿入することで用語を準備する必要があり*ます。


1

公理77の 180バイト

f(a:UP(x,INT),b:UP(x,INT)):Boolean==(ground?(a)or ground?(b)=>false;p:=b;r:=a;if degree(a::POLY INT,x)>degree(b::POLY INT,x)then(p:=a;r:=b);(p rem r)$UP(x,FRAC INT)~=0=>false;true)

以前のソリューション

v(a,b)==(ground?(a) or ground?(b) or (b rem a)$UP(x,FRAC INT)~=0=>false;true)

それは程度(b)> = degree(a)を書いた1つのバグを仮定するので間違っていた...テストおよび結果

(3) -> f(x^1-1,x^1-1)
   (3)  true
                                                            Type: Boolean
(4) -> f(x^1+1,2*x^2+4*x^1+2)
   (4)  true
                                                            Type: Boolean
(5) -> f(x^1+2,2*x^2+4*x^1+2)
   (5)  false
                                                            Type: Boolean
(6) -> f(x^1+7,x^2-49)
   (6)  true
                                                            Type: Boolean
(7) -> f(1, 1)
   (7)  false
                                                            Type: Boolean
(8) -> f(1, x^2+1)
   (8)  false
                                                            Type: Boolean
(9) -> f(x^8-1, x^2-1)
   (9)  true
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.