旋转根


11

给定一个具有整数系数的非零多项式,并且其根在虚数和实线上,因此如果a是,则实在-a,则返回另一个多项式,其根旋转90度。

细节

多项式可以以任何合理的格式给出,例如作为系数列表。作为a且仅当-a为根的对称条件也强制旋转多项式也具有实数整数系数。

例子

在下文中,多项式被给出为单项式的降序系数列表。(即常数倒数)多项式x^2-1具有根{1,-1}。通过90°乘以i(虚数单位)来旋转它们,因此输出多项式的根应该{i,-i}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]

我是否可以在多项式的次数以及多项式
罗汉Jhunjhunwala

是的,我认为这是可以接受的。
瑕疵

您所有的示例都使用单项多项式。我们可以假设输入多项式为一元吗?输出多项式必须为一元吗?
丹尼斯

不,它也可以具有除1以外的其他前导系数,并且输出也只能定义为整数倍。
瑕疵

似乎格式不一定是系数列表。合理的格式有多远?我的格式可以在不确定的字符串表达式x,让我的提交可以字符串替换x(i*x)?我可以格式化一个求多项式的函数,以便我的提交与函数组合x -> i*x吗?
xnor

Answers:


12

Mathematica,10个字节

纯函数,它具有x的一个函数并替换为ix。

#/.x->I*x&

仅7个字节的替代方案,但不确定是否计数。纯函数,它接受一个纯函数并返回一个x的函数。

#[I*x]&

5
而且您甚至不需要任何内置函数!
尼尔,

我很确定纯函数多项式是“合理的格式”(就像在这里一样),它#用作变量并&在末尾有一个。
JungHwan Min

如果可以的话,我会两次投票赞成
格雷格·马丁

我唯一关心的第二个答案是输入(纯函数)和输出(x的函数)之间的不匹配。
伊恩·米勒

6

果冻,5个字节

Jı*Ċ×

在线尝试!

这个怎么运作

将第一个元素乘以1,将第三个元素乘以-1,等等。

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

算法证明

设多项式为f(x)

既然我们保证如果x是根,那么也是-x,则so f必须是偶数,这意味着其奇数幂的系数必须是0

现在,旋转根部90°基本上就是f(ix)

扩展然后比较系数证明了该算法。


因此,我们无需触摸2、4、6、8等吗?
Rohan Jhunjhunwala

2
无论如何,这些都是零。
瑕疵

您的技巧ı*Ċ非常好,您应该解释一下:)
Leo

@Leo但这实际上是一个简单的实现...
Leaky Nun

这里的逻辑不太正确,因为您可以将偶数幂的所有系数改为0。
ØrjanJohansen

5

JavaScript(ES6),25个字节

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

原始多项式具有形式为x = ±aa的实线或虚线形式的解。除何时a = 0(在这种情况下x是多项式的因数)之外,这意味着这x² - a²是多项式的因数(这意味着替代项始终为零)。现在,当我们旋转根部时,系数变为x² + a²。由于所有因子同时变化,因此多项式的第三项(即所有-a²项的总和)会更改符号,第五项(即项对的乘积之和)-a²会保持相同的符号,依此类推。每隔一个词交替出现。




1

SILOS71 66字节

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

在线尝试!

我不知道@Leaky Nun在这里做了什么巫术来保存5个字节。

花了我一点时间来弄清楚,但是C的第二个位会像我们想要的那样交替出现。因此,@ Leaky Nun利用它来保存我们需要的位。



0

TI基本(20字节)

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

如果存储在中prgmA,请运行:

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

seq(只是必须是不支持复数的一个 *命令。:)

*:夸张


0

Casio-Basic,8个字节

n|x=𝑖x

使用Ian Miller的Mathematica方法的未命名函数。需要使用Math2键盘上的虚数((计数为2个字节,字符代码769),并且多项式应作为的等式输入x

代码为7个字节,n参数为1个字节。

说明:注意到方程n,然后只是替换的所有实例x𝑖x



0

Stax,5 个字节

Æ[]▐↨

在线运行和调试!

果冻港的答案。

使用ASCII表示来解释:

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

如果可能存在前导零,则需要先对其进行修整,而这又会花费另一个字节。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.