자바 스크립트 (ES7), 31 바이트
직접적인 공식. 0솔루션이없는 경우 반환 합니다.
v=>(r=(1+8*v**.5)**.5)%1?0:r>>1
온라인으로 사용해보십시오!
방법?
첫 번째 큐브 의 합 은 다음과 같습니다. , N에스엔엔
에스엔= ( n ( n + 1 )2)2= ( n2+ n2)2
(이것은 A000537 입니다.이 공식은 귀납법으로 쉽게 증명할 수 있습니다 . 여기 에 의 멋진 그래픽 표현이 .)에스5
역수로, 가 첫 큐브 의 합 이면 다음 방정식은 양의 정수 솔루션을 허용합니다.xV엑스
( x2+ x2)2= v
때문에 양극이고,이 리드에 :( x2+ x ) / 2
엑스2+ x − 2 v√= 0
다음과 같은 방법으로 긍정적 인 해결책을 제시합니다.
Δ = 1 + 8 v√x = − 1 + Δ−−√2
경우 의 정수이기 때문에, 이상한 일이 보장되는 자체가 이상하다. 따라서 솔루션은 다음과 같이 표현 될 수 있습니다. Δr = Δ−−√Δ
x = ⌊ r2⌋
댓글
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