JavaScript(ES7),31个字节
直接公式。0
如果没有解决方案,则返回。
v=>(r=(1+8*v**.5)**.5)%1?0:r>>1
在线尝试!
怎么样?
前个立方体的和由下式给出: ñ小号ññ
小号ñ= (Ñ (Ñ + 1 )2)2= (n2+ n2)2
(这是A000537。这个公式可容易地证明通过诱导。在这里是一个很好的图形表示。)小号5
相反,如果是前个立方体的总和,则以下等式允许采用正整数解:XvX
(x2+ x2)2= v
因为是正数,所以得出:(x2+ x )/ 2
X2+ x − 2 v√= 0
谁的积极解决方案是由:
Δ = 1 + 8 伏√x = − 1 + Δ--√2
如果是整数,则可以保证它是奇数,因为本身是奇数。因此,解决方案可以表示为: Δr = Δ--√Δ
X = ⌊ ř2⌋
已评论
v => // v = input
( r = //
(1 + 8 * v ** .5) // delta = 1 + 8.sqrt(v)
** .5 // r = sqrt(delta)
) % 1 ? // if r is not an integer:
0 // return 0
: // else:
r >> 1 // return floor(r / 2)
递归版本,36 35字节
NaN
如果没有解决方案,则返回。
f=(v,k=1)=>v>0?1+f(v-k**3,k+1):0/!v
在线尝试!
已评论
f = (v, // v = input
k = 1) => // k = current value to cube
v > 0 ? // if v is still positive:
1 + // add 1 to the final result
f( // do a recursive call with:
v - k ** 3, // the current cube subtracted from v
k + 1 // the next value to cube
) // end of recursive call
: // else:
0 / !v // add either 0/1 = 0 if v is zero, or 0/0 = NaN if v is
// non-zero (i.e. negative); NaN will propagate all the
// way to the final output