組み込みの因数分解/多項式関数を使用せずに、整数または有限体上の既約に完全に多項式を因数分解します。
入力
プログラム/関数はn入力として素数(またはゼロ)を受け取ります。フィールド/リングは、その次数の有限フィールド(つまりZ/nZ)、またはのZ場合にのみnです0。そうnでない0場合、または素数の場合、プログラムは失敗する可能性があります。多項式はになりますF[x]。
プログラム/関数も入力として多項式を受け取ります。
入力にはある程度の柔軟性があります。入力を受け取る方法を必ず指定してください。たとえば、多項式は係数のリストとして、またはほとんどの人が期待する形式(例:)50x^3 + x^2、またはその他の合理的な形式で入力できます。または、フィールド/リングの入力形式も異なる場合があります。
出力
プログラム/関数は、完全に因数分解された多項式を出力します。複数のルートを展開したままにすることができます(つまり、の(x + 1)(x + 1)代わりに(x + 1)^2)。バイナリ演算子間の空白を削除できます。並置をに置き換えることができ*ます。奇妙な場所に空白を挿入できます。ファクターを任意の順序に並べ替えることができます。x用語だけかもしれません(x)。xと書くことができますx^1。ただし、定数項にはが含まれない場合がありますx^0。無関係な+兆候は許可されます。あなたは0前にある用語を持っていないかもしれません、彼らは省かれなければなりません。各因子の先頭項がなければならない正で、負の符号は、外部でなければなりません。
テストケースでは、プログラムはこれらのそれぞれに対して妥当な時間(たとえば、2時間以内)で出力を生成できる必要があります。
入力: 2, x^3 + x^2 + x + 1
出力: (x + 1)^3
入力: 0, x^3 + x^2 + x + 1
出力: (x + 1)(x^2 + 1)
入力: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
出力: (3x + 2)(2x - 5)(x^2 + 3)
入力: 5, x^4 + 4x^3 + 4x^2 + x
出力: x(x + 4)(x + 4)(x + 1)
入力: 0, x^5 + 5x^3 + x^2 + 4x + 1
出力: (x^3 + 4x + 1)(x^2 + 1)
テストケースを批判してくれたPeter Taylorに感謝します。
pは要素{0, 1, ... , p-1}があり、加算/乗算modの下にありpます。基本的に、mod pで係数を減らしてください。また、ルート、つまり線形係数がある場合、多項式にプラグインされる{0, ... , p-1}と、そのうちの1つが0(mod p)を生成することに注意してください。
ZはZ/pZ、適切なpヘンゼルリフトに因数分解することです。ただし、おそらくゴルフのアプローチは、(これは確かに私が見ているルートです)因子の高さの単純な境界を使用して、それをブルートフォースします。