有什么方法可以将任何数字表示为 4 个平方和。
例如29可以表示为5^2+2^2+0^2+0^2
我尝试了以下代码,但一些数字给出了 5 个术语,例如 23 为 4^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);
}
最佳答案
和Bohemian说的不一样,我用4个术语解决了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(前一个)项的值。
关于java - 有什么方法可以将任何数字表示为 4 个平方和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102929/