对于整数N的四平方和表示

时间:2017-01-13 16:13:55

标签: algorithm number-theory

Lagrange's four-square theorem证明任何自然数都可以写成四个平方数的总和。我需要的是找到任何一种方法来将自然数x写为任何给定上限0 <= x <= N的所有N的四个平方数的总和。

到目前为止,我所做的是找到可以找到一个的所有数字<= N的两平方和表示,并将它们保存在一个名为two_square_div的数组中。然后我使用了如下的贪婪方法:

last_two_square_sum = 0

for num in 0..N
    if num can be written as sum of two square
        last_two_square_sum = num
    other_last_two_square_sum = num - last_two_square_sum
    four_square_div[num] = (two_square_div[last_two_square_sum], two_square_div[other_last_two_square_sum]

但是这种方法不适用于像23这样的数字last_two_square_sum = 20 other_last_two_square_sum = 3。但是3不能写成两个方格的总和,所以这种方法失败了。

那么任何人都可以提供正确的O(N)解决方案或任何有用的提示吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您的算法应该进行多次尝试(如果已经尝试,则必须改进退出条件)。

23可以写成3 + 20,是的;但是3不是二阶可分解的,不能导致解决方案。

所以你继续:接下来你尝试4 + 19,这次是19岁被拒绝。接下来你尝试5,所以23-5是18,5是1 2 + 2 2 而18是3 2 + 3 2

(当然这根本不是O(N))。

我不清楚你是如何到达20而不接受以前的解决方案;尝试发布整个代码。

另外,请尝试询问Math StackExchange。