Задача по теореме Лагранжа

andr2004

Новичок
Пользователь
Апр 7, 2020
24
4
3
Здравствуйте,несколько дней решаю задачу,но всё никак не получается:
Теорема Лагранжа утверждает, что любое натуральное число можно представить в виде суммы не более, чем четырех точных квадратов. По данному числy N выведите от 1 до 4 натуральных чисел, квадраты которых в сумме дают значение N.
Входные данные
Вводится натуральное число N
char14.png
10000.
Выходные данные
Выведите ответ на задачу.
Python:
n = int(input())
a = n
s = [0 for i in range(0, 4)]
for i in range(4):
    s[i] = int(n ** 0.5)
    n = n - s[i] ** 2   
if s[0] ** 2 + s[1] ** 2 + s[2] ** 2 + s[3] ** 2 == a:
    for d in range(4):
        if s[d] != 0:
            print(s[d])   
else:
    s[0] -= 1
    x = a - s[0] ** 2
    if s[0] != 0:
        print(s[0])
    for j in range(1, 4):
        s[j] = int(x ** 0.5)
        x = x - s[j] ** 2
        if s[j] != 0:
            print(s[j])
Решение прошло 90 тестов из 99(выдаёт,что неправильный ответ).Путём подбора и угадывания тестов кое-как смог "добить" до 97,но дальше n > 1000 и смысла перебирать оставшиеся числа я не вижу.Может быть можно как-то доработать или переделать программу.
Python 3.7
OC: Windows
 
  • Мне нравится
Реакции: Student

andr2004

Новичок
Пользователь
Апр 7, 2020
24
4
3
Python:
n = int(input())
q = 0
w = 0
e = 0
r = 0
for a in range(1,int(n ** 0.5) + 1):
    t = a * a
    for b in range(0, a + 1):
        y = b * b
        for c in range(0, b + 1):
            u = c * c
            if n - t - y - u >= 0:
                if (n - t - y - u) ** 0.5 == int((n - t - y - u) ** 0.5):
                    q = a
                    w = b
                    e = c
                    r = int((n - t - y - u) ** 0.5)
if q != 0:
    print(q)
if w != 0:
    print(w)
if e != 0:
    print(e)
if r != 0:
    print(r)
 
  • Мне нравится
Реакции: Student

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
@andr2004 решили?
 

andr2004

Новичок
Пользователь
Апр 7, 2020
24
4
3
 

Форум IT Специалистов