Xoay rễ


11

Cho một đa thức khác 0 với các hệ số nguyên và gốc nằm trên đường tưởng tượng và trên đường thẳng sao cho nếu alà một gốc thì cũng vậy -a, trả về một đa thức khác với các gốc xoay 90 độ.

Chi tiết

Đa thức có thể được đưa ra trong bất kỳ định dạng hợp lý, ví dụ như một danh sách các hệ số. Điều kiện đối xứng alà một gốc khi và chỉ khi -amột gốc quá thực thi đa thức xoay để có các hệ số nguyên thực.

Ví dụ

Sau đây các đa thức được đưa ra dưới dạng một danh sách các hệ số của các đơn thức ở mức độ giảm dần. (tức là hằng số đến sau) Đa thức x^2-1có gốc {1,-1}. Xoay chúng bằng 90°phương pháp nhân với i(đơn vị tưởng tượng), vì vậy đa thức đầu ra phải có gốc {i,-i}, đó là x^2 + 1.

Input / Output
[1 0 10 0 -127 0 -460 0 576]  [1 0 -10 0 -127 0 460 0 576]
[1 0 -4 0] [1 0 4 0]
[1] [1]

Tôi có thể lấy bằng cấp của đa thức cũng như đa thức
Rohan Jhunjhunwala

Có tôi nghĩ rằng đó là chấp nhận được.
flawr

Tất cả các ví dụ của bạn sử dụng đa thức monic. Chúng ta có thể giả sử đa thức đầu vào sẽ là monic không? Có phải đa thức đầu ra phải là monic?
Dennis

Không, nó cũng có thể có các hệ số hàng đầu khác hơn 1, và đầu ra cũng chỉ được xác định tối đa bội số.
flawr

Có vẻ như định dạng không phải là một danh sách các hệ số. Làm thế nào xa các định dạng hợp lý đi? Định dạng của tôi có thể là một biểu thức chuỗi trong không xác định x, do đó trình can tôi chuỗi thay thế xvới (i*x)? Định dạng của tôi có thể đánh giá một hàm đa thức, để trình của tôi là kết hợp nó với hàm x -> i*xkhông?
xnor

Câu trả lời:


12

Toán học, 10 byte

Hàm thuần có hàm x và thay thế trong ix.

#/.x->I*x&

Thay thế chỉ với 7 byte nhưng không hoàn toàn chắc chắn nếu nó được tính. Hàm thuần có hàm thuần và trả về hàm x.

#[I*x]&

5
Và bạn thậm chí không cần bất kỳ nội dung nào!
Neil

Tôi khá chắc chắn rằng một đa thức hàm thuần túy là một "định dạng hợp lý" (giống như ở đây ) Nó sử dụng #như là biến và có một &ở cuối.
JungHwan Min

Tôi sẽ nâng cấp điều này hai lần nếu tôi có thể
Greg Martin

Mối quan tâm duy nhất của tôi về câu trả lời thứ hai là sự không khớp giữa đầu vào (một hàm thuần túy) và đầu ra (một hàm của x).
Ian Miller

6

Thạch , 5 byte

Jı*Ċ×

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

Làm thế nào nó hoạt động

Nhân số phần tử 1thứ nhất theo -1, phần tử thứ ba theo , v.v.

Jı*Ċ×  argument: z
J      [1,2,...,len(z)]
 ı     i (the imaginary unit)
  *    to the power of (each element)
   Ċ   imaginary part
    ×  multiply by input (vectorize)

Bằng chứng về thuật toán

Hãy để đa thức được f(x).

Vì chúng tôi được đảm bảo rằng nếu xlà một gốc thì cũng vậy -x, fphải như vậy , có nghĩa là hệ số của nó đối với các quyền hạn lẻ phải là 0.

Bây giờ, xoay rễ bằng 90°bản chất là f(ix).

Mở rộng sau đó so sánh các hệ số chứng minh thuật toán.


Vì vậy, chúng ta không cần phải chạm vào thứ 2,4, 6, 8, v.v.?
Rohan Jhunjhunwala

2
Những cái đó bằng không.
flawr

Thủ thuật của bạn ı*Ċrất hay, bạn nên giải thích nó :)
Leo

@Leo Về cơ bản, đây là một cách thực hiện đơn giản ...
Leaky Nun

Logic ở đây không hoàn toàn đúng, vì thay vào đó bạn có thể có tất cả các hệ số cho sức mạnh chẵn là 0.
Ørjan Johansen

5

JavaScript (ES6), 25 byte

a=>a.map((e,i)=>i%4?-e:e)

Đa thức ban đầu có các giải pháp có dạng x = ±anằm trên đường thẳng thực hoặc ảo. Ngoại trừ khi a = 0(trong trường hợp xnày là một yếu tố của đa thức), điều này có nghĩa là đó x² - a²là một yếu tố của đa thức (có nghĩa là các thuật ngữ thay thế luôn luôn bằng không). Bây giờ khi chúng ta xoay rễ, yếu tố thay đổi thành x² + a². Vì tất cả các yếu tố thay đổi cùng một lúc, số hạng thứ ba của đa thức, là tổng của tất cả các số hạng -a², dấu thay đổi, số hạng thứ năm, là tổng của các sản phẩm của các cặp số hạng -a², giữ cùng một dấu, v.v. xen kẽ mọi thuật ngữ khác.


4

Octave , 27 byte

@(x)round(poly(roots(x)*j))

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

Điều này trực tiếp áp dụng định nghĩa: tính toán gốc, nhân với j, chuyển đổi trở lại từ gốc sang đa thức. Làm tròn số cuối cùng là cần thiết vì các lỗi số dấu phẩy động.



1

Silos , 71 66 byte

readIO
b=i
lbla
readIO
d=c
d&2
i=i*(1-d)
printInt i
b-1
c+1
if b a

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

Tôi không biết thủ thuật @Leaky Nun đã làm gì ở đây để tiết kiệm 5 byte.

Mất một giây để tìm hiểu, nhưng bit thứ hai của C sẽ thay thế như chúng ta muốn. Do đó @Leaky Nun đã khai thác điều này để tiết kiệm các bit chúng ta cần.



0

TI-Basic, 20 byte

seq(real(i^X/i)Ans(X),X,1,dim(Ans

Nếu được lưu trữ trong prgmA, hãy chạy với:

{1, 0, 3, 0, 1}:prgmA

seq(chỉ phải là lệnh một * không hỗ trợ các số phức. :)

*: Phóng đại


0

Casio-Basic, 8 byte

n|x=𝑖x

Hàm chưa được đặt tên, sử dụng phương pháp Mathicala của Ian Miller's. Cần phải sử dụng từ bàn phím Math2 (được tính là 2 byte, mã char 769) và đa thức nên được nhập dưới dạng phương trình x.

7 byte cho mã, 1 byte để chỉ định nlàm tham số.

Giải thích : Thực hiện phương trình n, sau đó chỉ cần thay thế tất cả các trường hợp xbằng 𝑖x.



0

Stax , 5 byte

Æ[]▐↨

Chạy và gỡ lỗi trực tuyến!

Cổng của Jelly trả lời.

Sử dụng đại diện ASCII để giải thích:

mih|1*
m         Map each element with rest of program, print mapped results on individual lines
 i        Current 0-based loop index
  h       Floor(i/2)
   |1     (-1)^(i/2)
     *    Multiply with current element

Nếu có thể có các số 0 đứng đầu, chúng cần được cắt trước và nó có thể được thực hiện với chi phí của một byte khác.

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.