首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个多项式是正方形的吗?

这个多项式是正方形的吗?
EN

Code Golf用户
提问于 2022-04-24 23:48:39
回答 6查看 2K关注 0票数 18

给定一个积分多项式p,确定p是否是另一个积分多项式的平方。

积分多项式是以整数为系数的多项式。

例如,x^2+2x+1应该给出真相,因为x^2+2x+1 = (x+1)^2

另一方面,2x^2+4x+2应该给出谎言:2x^2+4x+2 = (\sqrt{2}x+\sqrt{2})^2。但是\sqrt{2}x+\sqrt{2}并不是一个积分多项式。

输入

一个多项式,任何合理的格式。例如,多项式x^4-4x^3+5x^2-2x可以表示为:

  • 按降序排列的系数列表:[1,-4,5,-2,0]
  • 按升序排列的系数列表:[0,-2,5,-4,1]
  • 按任何顺序排列的一对(coefficient, degree)的列表:[(1,4),(-4,3),(5,2),(-2,1),(0,0)]
  • 以度为键,系数为值的地图:{4:1,3:-4,2:5,1:-2,0:0}
  • 具有选定变量的多项式的字符串表示形式,如x"x^4-4*x^3+5*x^2-2*x"
  • 内建多项式对象,如PARI/GP中的x^4-4*x^3+5*x^2-2*x

输出

表示多项式是否为正方形的值。你可以选择

  • 使用您的语言约定输出真实/错误(允许交换),或
  • 使用两个不同的固定值分别表示真(肯定)或假(负)。

这是密码-高尔夫,所以以字节为单位的最短代码获胜。

测试案例

在这里,我按降序使用系数列表:

Truthy

代码语言:javascript
复制
[]
[25]
[1,2,1]
[1,2,1,0,0]
[1,4,0,-8,4]
[4,28,37,-42,9]
[4,0,-4,4,1,-2,1]
[1,-12,60,-160,240,-192,64]

Falsy

代码语言:javascript
复制
[-1]
[24,1]
[1,111]
[2,4,2]
[1,2,1,0]
[1,3,3,1]
[1,-4,5,-2,0]
[4,0,-4,4,1,2,1]
[1,-9,30,-45,30,-9,1]
EN

回答 6

Code Golf用户

发布于 2022-04-25 06:34:32

JavaScript (Node.js),102个字节

代码语言:javascript
复制
a=>a.some(n=>(b[j=i]=b.map(m=>n-=m*~~b[j--])|b[0]?n/2/b[0]:n**.5)%(1/a[i+i++]?1:1/0)!=0,b=[],i=0)|1&~i

在网上试试!

按降序输入系数列表。列表应该只包含一个零,或者列表中的第一个值应该是非零。

我相信这是正确的。但我不能用我的数学知识证明这一点。它至少通过了所有的测试。

票数 6
EN

Code Golf用户

发布于 2022-04-25 03:22:40

Python3,289个字节:

代码语言:javascript
复制
R=range
def m(a,b):
 r={}
 for x,y in a:
  for j,k in b:r[y+k]=r.get(y+k,0)+x*j
 return[(r[i],i)for i in r]
def c(d,k=[]):
 if[]==d:yield k;return
 for x in R(abs(d[0][0])+1):
  for e in R(d[0][1]+1):
   for i in[1,-1]:yield from c(d[1:],k+[(i*x,e)])
f=lambda x:any(x==m(i,i)for i in c(x))

在网上试试!

基本的蛮力。

票数 4
EN

Code Golf用户

发布于 2022-04-25 10:02:28

木炭,56字节

代码语言:javascript
复制
﹪Lθ²F⟦§θ⁰↨θΠ⊗⊕↔θ⟧«≔×⁰↨ι⁴ζFLζ«§≔ζκ¹§≔ζꬋιX↨²ζ²»¿⁻ιX↨²ζ²⎚

在网上试试!链接是详细的代码版本。不支持空列表(使用[0]代替)。输出木炭布尔值,即如果-认为多项式是正方形,则不输出。说明:由于@tsh击败了我原来的算法,所以我选择了这种方法,但我只能证明它没有错误的负数。如果有人能想出一个反例,我将删除这个答案,等待使用@tsh的方法重写。编辑:找到了一个反例,但@Nitrodon的说法是,只有奇数度的多项式才能成为反例,所以我花了5个字节来检查多项式是否为偶数。编辑:找到了另一个反例,所以我花了6个字节来检查前导系数是一个完美的平方。

代码语言:javascript
复制
﹪Lθ²

如果多项式为偶数度,则输出-

代码语言:javascript
复制
F⟦§θ⁰↨θΠ⊗⊕↔θ⟧«

求出一个非常大的整数,取所有系数的绝对值,递增并加倍,然后取乘积。在此值下计算多项式。对多项式的前导系数和结果进行循环。

代码语言:javascript
复制
≔×⁰↨ι⁴ζFLζ«§≔ζκ¹§≔ζꬋιX↨²ζ²»

执行二进制搜索,查找与此值的平方根最近的整数。

代码语言:javascript
复制
¿⁻ιX↨²ζ²⎚

如果其平方不等于值,则清除输出。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/246526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档