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 / perkalian p
. Pada dasarnya, kurangi koefisien apa pun dengan mod p
dan Anda baik. Juga, perhatikan bahwa jika ia memiliki root, yaitu faktor linier, salah satunya {0, ... , p-1}
akan menghasilkan 0
(mod p
) ketika dicolokkan ke polinomial.
Z
adalah faktor atas Z/pZ
untuk p
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.