а сможете решить диофантовое уравнение?:)
https://www.codewars.com/kata/554f76dca89983cc400000bb
вот алгоритм
В вашем подходе вы завершаете цикл от sqrt (n) до n. Это означает, что временная сложность вашего решения составляет O (n).
Если бы нас интересовали отрицательные решения, мы могли бы, учитывая неотрицательную пару (x, y), создать 3 решения, (-x, y), (x, -y) и (-x, -y) (эти решения не обязательно различны, поскольку x или y могут быть 0). Таким образом, мы можем ограничиться неотрицательными x и y. Я также предполагаю, что n> 0.
Теперь предположим, что a = x - 2y и b = x + 2y. С a <= b, потому что y> = 0.
Тогда a * b = n и b = n / a.
Теперь мы можем перебрать все значения a с помощью 1 <= a <= sqrt (n) и проверить, является ли b = n / a целым числом. (Если бы a было больше sqrt (n), b = n / a было бы меньше a.)
Для всех значений a, где b - целое число, мы вычисляем x = (a + b) / 2 и y = (b - a) / 4. Если x и y - целые числа, у нас есть решение.
Временная сложность этого алгоритма составляет O (sqrt (n)).