java - 有什么方法可以将任何数字表示为 4 个平方和?

标签 java

有什么方法可以将任何数字表示为 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. 从数字的平方根开始 - 1。例如SQRT(29) = 5 - 1 = 4;这是我们的第一个学期。
  2. 取点 1) 的值,对其进行平方,然后再次将点 1) 的平方值加到它上,看它是否大于 N。如果是,则将第二个和项减 1,并将平方值加到1 的值)。
  3. 如果前面的平方值项总和小于 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/

相关文章:

java - java中POJO对象到JSON对象的转换

java - 产生更少的垃圾会导致更长的 GC 暂停

java - 防止 SQL 注入(inject) (Java)

Java 游戏开发 : Trying to Separate World and Renderer

java - Java Swing 同时进行 MouseEntered 和 KeyPressed

java - Android 音频记录和播放已损坏

java - 如何在单独的线程中进行单例的急切初始化?

java - 在具有许多传递依赖项的应用程序中实现 SLF4J

java - 在浏览器中的 Applet 中重新加载 DLL

java - OSX 上的 Eclipse 错误