题目:https://ac.nowcoder.com/acm/contest/13504/C
题意:能否将一个数分解成5个正平方数
题解:
拉格朗日四平方数和定理:
任意一个非负整数可以表示为四个平方数(0也是平方数)的和.
比如这样:
1=1+0+0+0
2=1+1+0+0
5=4+1+0+0
任意一个非负整数拆出来的平方数里面,可能有任意一个非负整数拆出来的平方数里面,可能有[0,4]个0.
有一个特殊的数字169,他分别可以表示成1,2,3,4个正平方数的和.
169=13*13
169=12∗12+5∗5
169=12∗12+4∗4+3∗3
169=10∗10+8∗8+2∗2+1∗1
169=12∗12+4∗4+2∗2+2∗2+1∗1
那么对于任意一个不小于169的整数的整数n,设,设m=n-169.
这个m不小于0,分解成四个平方数,可能会含有0,1,2,3,4个0.
如果m分解出来的四个平方数中有四个正数,那么n=m+13*13.
如果m分解出来的四个平方数中有三个正数,那么n=m+1212+55
如果m分解出来的四个平方数中有两个正数,那么n=m+1212+44+3*3
如果m分解出来的四个平方数中有一个正数,那么n=m+1010+88+22+11
如果m分解出来的四个平方数中有没有正数,那么n=m+1212+44+22+22+1*1
所以任何不小于169169的整数,都符合条件.
对于小于169的整数,暴力打表发现以下几个数字不符合
0,1,2,3,4,6,7,9,10,12,15,18,33
所以如果输入是以上数字,直接NO
否则YES.