题意理解
给定一个数,求它完全平方数的个数
问题分析
根据数论理论,每个数最多能表示成4个完全平方数的和。
如果是4个平方数,那么这个数满足等式结构 4^a * (8 * b + 7).
剩下一个,二个,三个,三个最难,我们用排除法,先看看能不能是一个数的平方,再看看它的余数是不是一个数的平方。剩下必定是3个平方数
其他
链接
int numSquares(int n) {
while (n % 4 == 0) //从n循环缩小到1/4 消去4^a
{
n = n / 4;
}
if (n % 8 == 7) //如果剩余的n余数是7,n只能被4个平方数表示
{
return 4;
}
for (int a = 0; a * a <= n; a ++) //遍历可能平方数
{
int b = sqrt (n - a * a);
if (a * a + b * b == n) //是否被1或2个数平方和表示
return !!b + !!a; //!!表示把非0数表示成1,把0表示成0,如果a,b都不是0,那么2个平方数.
}
return 3; //否则是3,(只有4种情况)
}