【问题标题】:four-square sum representation for integers upto N整数到 N 的四平方和表示
【发布时间】:2017-01-13 16:13:55
【问题描述】:

Lagrange's four-square theorem 证明任何自然数都可以写成四个平方数之和。对于任何给定的上限N,我需要找到任何一种方法将自然数x 写为所有0 <= x <= 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 = 20other_last_two_square_sum = 3。但是 3 不能写成两个平方的和,所以这个方法失败了。

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

【问题讨论】:

    标签: algorithm number-theory


    【解决方案1】:

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

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

    所以你继续:接下来你尝试 4 + 19,这次是 19 被拒绝。接下来尝试 5,所以 23-5 是 18,5 是 12 + 22 而 18 是 32 + 32.

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

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

    另外,请尝试在 Math StackExchange 上提问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2015-03-04
      • 2023-03-20
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多