【发布时间】: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) 解决方案或任何有用的提示吗?谢谢。
【问题讨论】: