设f(x)=12+22+....+x2=x*(x+1)*(2x+1)/6
找到一个t使得 f(t-1)+1<=n<=f(t)
设F(n)=a12+a22+...=n 就是n可以由a1a2等不同整数的平方凑出,且最大的数最小.
所以只要f(t)-n能凑出来,n也一定能凑出来.
同理对于任意正整数k 当0<=f(k)-n=11的时候n一定会被凑出.
f(11)=506 这就是506的来历.
所以凑出n就可以二分找出t然后判断f(t)-n能否被凑出.
对于第二问.
可以发现,对于一串数,f(t)是相同的,这一串数中较小的128个中一定会有31个数x使得f(t)-x不能被凑出,而这些数就是超重的数.