将n划分为三个平方之和的数量(快速算法)

时间:2019-04-19 12:17:59

标签: algorithm math number-theory

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

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

我在https://oeis.org/A000164上找到了一些信息,但“公式”部分中有一个O(n)-算法
(因为我们需要在计算“ n-k^2中找到每个e(n-k^2)号的所有除数)和O(n)-算法在MAPLE部分中。

1 个答案:

答案 0 :(得分:2)

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

这基于将数字表示为高斯整数共轭。 (a + bi)*(a - bi) = a^2 + b^2。参见https://mathoverflow.net/questions/29644/enumerating-ways-to-decompose-an-integer-into-the-sum-of-two-squareshttps://stackoverflow.com/a/54839035/2034787