Условие задачи:
Решение:
Первые формулы зависимостей троек Пифагора известны из трудов Эвклида 2100 г до н.э, самая известная из них:
В первую очередь я обнаружил что в Python нет встроенной функции умножения списков, реализуем ее в лоб:
def listmult(lst):
s=1
for i in lst:
s*=i
return s
Далее объявим функцию, которая перебирает все возможные значения m/n до тех пор, пока сумма троек не будет равна передаваемому значению stop. Аргумент step задает диапазон для перебора m,n и увеличивается в двое если при достижении значения stop мы так и не нашли нужную тройку:
def fibs(stop,step):
p=step
fib=[]
while True:
for n in range(p-(p-1),p):
for m in range(p-(p-2),p+1):
if m>n:
fib=[2*n*m,(m**2)-(n**2),(m**2)+(n**2)]
if sum(fib)==stop:
return listmult(fib)
p+=step
print(fibs(1000,100))
Выражение fib=[2*n*m,(m**2)-(n**2),(m**2)+(n**2)] каждый раз задает значение 3-ки.
Код не особо эффективен но для данной задачи работает быстро, так что условие выполнено, задача решена
Тройка Пифагора - три натуральных числа a < b < c, для которых выполняется равенство
a2 + b2 = c2
Например, 32 + 42 = 9 + 16 = 25 = 52.
Существует только одна тройка Пифагора, для которой a + b + c = 1000.
Найдите произведение abc.
Найдите произведение abc.
Решение:
Первые формулы зависимостей троек Пифагора известны из трудов Эвклида 2100 г до н.э, самая известная из них:
a = 2mn, b = m2 − n2, c = m2 + n2 , m > n
Ну что же, попробуем ее реализовать в коде.
def listmult(lst):
s=1
for i in lst:
s*=i
return s
Далее объявим функцию, которая перебирает все возможные значения m/n до тех пор, пока сумма троек не будет равна передаваемому значению stop. Аргумент step задает диапазон для перебора m,n и увеличивается в двое если при достижении значения stop мы так и не нашли нужную тройку:
def fibs(stop,step):
p=step
fib=[]
while True:
for n in range(p-(p-1),p):
for m in range(p-(p-2),p+1):
if m>n:
fib=[2*n*m,(m**2)-(n**2),(m**2)+(n**2)]
if sum(fib)==stop:
return listmult(fib)
p+=step
print(fibs(1000,100))
Выражение fib=[2*n*m,(m**2)-(n**2),(m**2)+(n**2)] каждый раз задает значение 3-ки.
Код не особо эффективен но для данной задачи работает быстро, так что условие выполнено, задача решена