有没有办法代表任何数字作为4个方格的总和.
例如29可以表示为5 ^ 2 2 ^ 2 0 ^ 2 0 ^ 2
我尝试了以下代码,但是一些数字给出5terms,例如23 ^ 2 2 ^ 2 1 ^ 2 1 ^ 2 1 ^ 2
我试过的代码是:
x=0; while(num!=0){ x=(int)Math.floor(Math.sqrt(num)); num=num-(x*x); }
解决方法
不像波希米亚人所说,我以四个方式解决了23个问题:
23 = 3^2 + 3^2 + 2^2 + 1^2
和29如下:
29 = 4^2 + 3^2 + 2^2 + 0^2
我的逻辑开始于:
>从数字的平方根开始 – 1.例如SQRT(29)= 5 – 1 = 4;这是我们的第一个任期.
>从点1获取值),将其平方并再次从点1中加上平方值,并查看它是否大于N.如果是,则将第二和项减1,并将其平方值加到值1).
>如果先前的平方值项总和小于N,则找到下一个值项,并重复2)直到所有4个项加起来为N.
注意:这是为了你的简单的情况.对于复杂情况,例如323,这可能不行.
323 = 17^2 + 4^2 + 3^2 + 3^2
请记住,当您找到x项时,该术语的值小于或等于x-1(上一个)术语的值.