Tanpa menggunakan fungsi anjak / polinomial bawaan, faktor polinom sepenuhnya menjadi irreducible atas bilangan bulat atau bidang terbatas.
Memasukkan
Program / fungsi Anda akan menerima beberapa bilangan prima (atau nol) n
sebagai input. Bidang / cincin adalah bidang hingga dari urutan itu (yaitu Z/nZ
), atau hanya Z
jika n
ada 0
. Program Anda mungkin gagal jika n
bukan 0
atau prima. Polinomial akan berada di F[x]
.
Program / fungsi Anda juga akan menerima input polinomial.
Ada beberapa fleksibilitas dalam input, pastikan untuk menentukan bagaimana Anda ingin menerima input. Misalnya, polinomial dapat menjadi input sebagai daftar koefisien, atau dalam bentuk yang kebanyakan orang harapkan (mis .:) 50x^3 + x^2
, atau bentuk wajar lainnya. Atau format memasukkan bidang / dering juga bisa berbeda.
Keluaran
Program / fungsi Anda akan menampilkan faktor polinom sepenuhnya. Anda dapat membiarkan beberapa root diperluas (mis. (x + 1)(x + 1)
Bukannya (x + 1)^2
). Anda dapat menghapus spasi putih di antara operator biner. Anda dapat mengganti penjajaran dengan *
. Anda dapat memasukkan spasi putih di tempat-tempat aneh. Anda dapat menyusun ulang faktor menjadi urutan apa pun yang Anda inginkan. The x
jangka bisa saja (x)
. x
dapat ditulis sebagai x^1
; Namun istilah konstan mungkin tidak ada x^0
. +
Tanda-tanda asing diijinkan. Anda mungkin tidak memiliki istilah dengan 0
di depan, mereka harus ditinggalkan. Istilah utama dari setiap faktor harus positif, tanda-tanda negatif harus di luar.
Uji kasus, program Anda harus dapat menghasilkan output untuk masing-masing dalam waktu yang wajar (katakanlah, <= 2 jam):
Memasukkan: 2, x^3 + x^2 + x + 1
Keluaran: (x + 1)^3
Memasukkan: 0, x^3 + x^2 + x + 1
Keluaran: (x + 1)(x^2 + 1)
Memasukkan: 0, 6x^4 – 11x^3 + 8x^2 – 33x – 30
Keluaran: (3x + 2)(2x - 5)(x^2 + 3)
Memasukkan: 5, x^4 + 4x^3 + 4x^2 + x
Keluaran: x(x + 4)(x + 4)(x + 1)
Memasukkan: 0, x^5 + 5x^3 + x^2 + 4x + 1
Keluaran: (x^3 + 4x + 1)(x^2 + 1)
Terima kasih khusus kepada Peter Taylor karena mengkritik kasus pengujian saya
p
memiliki unsur-unsur{0, 1, ... , p-1}
dan berada di bawah mod penambahan / perkalianp
. Pada dasarnya, kurangi koefisien apa pun dengan modp
dan Anda baik. Juga, perhatikan bahwa jika ia memiliki root, yaitu faktor linier, salah satunya{0, ... , p-1}
akan menghasilkan0
(modp
) ketika dicolokkan ke polinomial.Z
adalah faktor atasZ/pZ
untukp
lift Hensel yang cocok dan kemudian. Namun, pendekatan golf mungkin (dan ini tentu saja rute yang saya lihat) untuk menggunakan ikatan sederhana pada ketinggian faktor dan memaksakannya.Jawaban:
GolfScript (222 byte)
Demo online
Catatan
n
diikuti oleh array koefisien GolfScript dari yang paling signifikan. Misalnya0, x^5 + 5x^3 + x^2 + 4x + 1
harus diformat sebagai0 [1 0 5 1 4 1]
.Z
. Saya mengatasinyaZ
dengan menggunakan bentuk santai dari batas tinggi Mignotte. Sebuah makalah yang bagus tentang batas tinggi dalam anjak piutang adalah Batas pada Faktor di Z [x] , John Abbott, 2009 (tautannya ke arxiv pracetak; CV-nya mengatakan bahwa itu telah diterima oleh Journal of Symbolic Computation ). Bentuk paling santai yang diberikan ada dalam hal norma L-2, tetapi untuk menghemat byte saya bersantai lebih jauh dan menggunakan norma L-1 sebagai gantinya. Maka itu kasus kekerasan paksa oleh divisi sidang.Z
ini hanya cincin dan karenanya perlu dilakukan pembagian uji coba oleh faktor kandidat non-monik. Saya berhasil lolos dengan tidak menerapkan bilangan rasional dengan melakukan tes pembagian faktor utama dan mengumpulkan bendera "kesalahan"e
.Z
umumnya lebih lambat, dan tidak dapat diuji dengan demo online. Namun, kasus uji resmi paling lambat membutuhkan waktu 10 menit, yang berada dalam batas waktu "wajar".sumber