Lagrange's four-square theorem доказывает, что любое натуральное число можно записать в виде суммы четырех квадратных чисел. Мне нужно найти любой способ написать натуральное число x
как сумму четырех квадратных чисел для всех 0 <= x <= N
для любого заданного верхнего предела 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)
или любой полезный намек? Спасибо.