Algorithm 将'n'划分为三个平方和的数目(快速算法)

Algorithm 将'n'划分为三个平方和的数目(快速算法),algorithm,math,number-theory,Algorithm,Math,Number Theory,几年前,我发现了一个有趣的编程问题: “以n

几年前,我发现了一个有趣的编程问题:
“以
n<10^9
和1秒的时间限制,将
n
划分为三个平方和的分区数。”

问题:有人知道如何在给定约束条件下解决此问题吗?
我认为这完全可以用渐近时间复杂度来完成,比仅仅用
O(n)
更快?是有一些聪明的数学方法,还是代码优化工程问题

我在上找到了一些信息,但在公式部分有一个
O(n)
-algo

(因为我们需要找到每个
n-k^2
数字的所有除数,用于计算
e(n-k^2)
)和
O(n)
-在MAPLE部分中的算法。

是。首先将数字n-z^2分解为素数,将素数分解为高斯共轭,并找到不同的表达式进行扩展和简化,得到a+bi,然后将其提升为a^2+b^2。我们可以排除任何包含具有奇数幂的形式素数
4k+3
的候选
n-z^2


这是基于将数字表示为高斯整数共轭<代码>(a+bi)*(a-bi)=a^2+b^2。请参阅和

您是否建议将每个“sqrt(n)”数字“n-z^2”分解为因数?但是,如果我将每个sqrt(n)数分解为sqrt(n)运算的平均值,我会得到O(n)时间,还是没有?@DmitryYatin如果我们预先计算了相关的素数,并且只测试每个候选素数是否可以被这些素数整除呢?关于我提到的SO问题,可能还有其他优化候选生成的方法。@oeis中的公式中的DmitryYat很有趣。通过这种方法,仅对小于'n-z^2'的素数4k+1、4k+3进行因式分解,并对余数进行启发式素性测试,就解决了这个问题。