有限体または整数上の多項式の因数分解


20

組み込みの因数分解/多項式関数を使用せずに、整数または有限体上の既約に完全に多項式を因数分解します。

入力

プログラム/関数は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に感謝します。


1
私が考えて、これは私の一部にフラッシュバック与えている困難学部数学を。私はここで正しい方向に向かっていますか?
デジタル外傷14年

1
これは私が悪夢をしようとしていた時のことを思い出す印刷 ...正しく多項式を
SP3000

私が理解できなかったのは残念ですが、最初の入力番号は何をすることになっていますか?またはそれが出力にどのように影響しますか?
オプティマイザー14年

@Optimizer最初の入力番号は、作業しているフィールド/整数を決定します。数値がゼロ以外の場合、その次数の有限体で作業しています。順序の有限体にpは要素{0, 1, ... , p-1}があり、加算/乗算modの下にありpます。基本的に、mod pで係数を減らしてください。また、ルート、つまり線形係数がある場合、多項式にプラグインされる{0, ... , p-1}と、そのうちの1つが0(mod p)を生成することに注意してください。
ジャスティン14年

1
@flawr、因数分解の標準的なアプローチZZ/pZ、適切なpヘンゼルリフトに因数分解することです。ただし、おそらくゴルフのアプローチは、(これは確かに私が見ているルートです)因子の高さの単純な境界を使用して、それをブルートフォースします。
ピーターテイラー14年

回答:


17

GolfScript(222バイト)

~.@:q@.0\{abs+}/2@,2/)?*or:^{\1$^base{^q- 2/-}%.0=1=1$0=q>+{{:D[1$.,2$,-)0:e;{.0=0D=%e|:e;(D(@\/:x@@[{x*~)}%\]zip{{+}*q!!{q%}*}%}*e+])0-{;0}{@;@\D.}if}do}*;\).^3$,)2/?<}do;][[1]]-{'('\.,:x;{.`'+'\+'x^'x(:x+x!!*+\!!*}%')'}/

オンラインデモ

ノート

  1. 入力形式のn後には、最上位から最下位までの係数のGolfScript配列が続きます。たとえば0, x^5 + 5x^3 + x^2 + 4x + 1、の形式にする必要があります0 [1 0 5 1 4 1]
  2. 有限体上では、関連するほど十分に小さい次数の有限数の多項式のみが存在します。しかし、これはそうではありませんZZMignotteの身長制限のリラックスした形を使用して処理します。ファクタリングの高さの境界に関する優れた論文は、Z [x]の境界の境界、John Abbott、2009です(リンクはarxivプレプリントです。彼のCVは、それがJournal of Symbolic Computationに受け入れられたと言います)。そこにある最もリラックスした形式はL-2ノルムの観点からですが、バイトを節約するためにさらにリラックスして、代わりにL-1ノルムを使用します。それから、裁判分割によるブルートフォースの場合です。
  3. 有限体上では、すべての多項式は定数倍のモニック多項式なので、私はモニック多項式による試行除算のみを行い、フィールドの逆数を保存します。ただし、これZは単なるリングであるため、非モニック候補因子による試行分割を行う必要があります。有理数の除算テストを行い、で「エラー」フラグを累積することにより、合理的な数値を実装しないことに成功しましたe
  4. ポイント2と3の両方Zは、ファクタリングオーバーのケースが一般に遅く、オンラインデモでテストできないことを意味します。ただし、最も遅い公式のテストケースには10分かかり、これは「合理的な」制限時間内です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.