Phân tích đa thức


12

Cho một đa thức tích phân bậc lớn hơn một, hoàn toàn phân tách nó thành một thành phần của đa thức tích phân bậc lớn hơn một.

Chi tiết

  • Một đa thức tích phân là một đa thức chỉ có các số nguyên là hệ số.
  • Cho hai đa thức pqcác thành phần được xác định bởi (p∘q)(x):=p(q(x)).
  • Sự phân rã của một đa thức tích phân plà một chuỗi các đa thức tích phân hữu hạn trong q1,q2,...,qnđó deg qi > 1cho tất cả 1 ≤ i ≤ np(x) = q1(q2(...qn(x)...)), và tất cả qikhông thể phân tách được nữa. Sự phân hủy không nhất thiết là duy nhất.
  • Bạn có thể sử dụng ví dụ như danh sách các hệ số hoặc được xây dựng trong các loại đa thức làm đầu vào và đầu ra.
  • Lưu ý rằng nhiều nội dung cho tác vụ này thực sự phân rã các đa thức trên một trường nhất định và không nhất thiết phải là số nguyên, trong khi thử thách này đòi hỏi một đa thức số nguyên phân rã. (Một số đa thức số nguyên có thể thừa nhận phân rã thành đa thức số nguyên cũng như phân rã có chứa đa thức hợp lý.)

Ví dụ

x^2 + 1
[x^2 + 1] (all polynomials of degree 2 or less are not decomposable)
x^6 - 6x^5 + 15x^4 - 20x^3 + 15x^2 - 6 x - 1
[x^3 - 2, x^2 - 2x + 1]
x^4 - 8x^3 + 18x^2 - 8x + 2 
[x^2 + 1, x^2 - 4x + 1]
x^6 + x^2 + 1
[x^3 + x + 1, x^2]
x^6
[x^2, x^3]
x^8 + 4x^6 + 6x^4 + 4x^2 + 4 = (x^2 + 1)^4 + 3
[x^2 + 3, x^2, x^2 + 1]
x^6 + 6x^4 + x^3 + 9x^2 + 3x - 5
[x^2 + x - 5, x^3 + 3*x], [x^2 + 5*x + 1, x^3 + 3*x - 2]

Sử dụng Maxima để tạo ví dụ: Dùng thử trực tuyến!

Một số thuật toán phân tách có thể được tìm thấy ở đâyđây .

Câu trả lời:


4

Pari / GP , 84 byte

f(p)=[if(q'',[f(q),r],p)|r<-x*divisors(p\x),r''&&p==subst(q=substpol(p,r,x),x,r)][1]

Dựa trên thuật toán được mô tả ở đây .

Hãy thử trực tuyến!


1
Bạn có kiểm tra (hoặc lọc ra) xem bạn có thực sự phân tách thành đa thức tích phân không? (Tôi đang hỏi vì các thuật toán trong bài viết được liên kết mô tả hệ số hóa trên một số lĩnh vực và tôi không biết bất kỳ Pari / GP nào.)
flawr

1
@flawr Tôi đang sử dụng thuật toán thứ hai trong bài báo, nó luôn trả về các đa thức tích phân khi đầu vào là tích phân. Trong thực tế, divisorshàm trong Pari / GP luôn trả về các đa thức nguyên thủy khi nó cần một đa thức tích phân. Có thể chứng minh rằng nếu p=q∘r, ở đâu prlà tích phân, và rnguyên thủy với r(0)=0, thì qcũng phải là tích phân. Ở đây p, q, rtương ứng với f, g, htrong tờ giấy.
alephalpha

2

Ngôn ngữ Wolfram (Mathicala) , 29 byte

Decompose[#/.x->x+a,x]/.a->0&

Hãy thử trực tuyến!

Tôi có ví dụ được thiết lập ở đây để soạn một đa thức ngẫu nhiên từ các tứ giác ngẫu nhiên (hoặc ít hơn), mở rộng nó ra, và sau đó cố gắng phân tách nó.

Cần phải làm phức tạp đa thức với biến giả (a) vì tích hợp sẽ không cố gắng phân hủy một đơn thức.

Tôi nhận thấy rằng câu trả lời thường có hệ số lớn hơn nhiều so với trong thành phần ban đầu, nhưng chúng thực sự luôn là số nguyên.


Trường hợp bạn đã tìm thấy thông tin Decompose[]sẽ luôn trả về đa thức tích phân (nếu được cung cấp với đa thức số nguyên)? Khi thảo luận trong trò chuyện gần đây, chúng tôi không thể tìm thấy bất cứ điều gì về điều đó.
flawr

1
Làm Options@Decomposevà nó sẽ cho bạn biết {Modulus->0}. Bây giờ hãy tra cứu Modulus và bạn sẽ thấy "Modulus cài đặt-> 0 chỉ định vòng đầy đủ [DoubleStruckCapitalZ] của các số nguyên."
Kelly Lowder

Ah đó là tốt đẹp, cảm ơn cho công phu!
flawr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.