Нахождения числа зная только сумму и произведение
Каким образом можно получить числа, зная только сумму и произведение в python? Кратко: 22, 120 - это 10 и 12 (10 + 12 = 22; 10 * 12 = 120) - нам известны только 22 и 120, как найти 10 и 12?
Ответы (3 шт):
Автор решения: n1tr0xs
→ Ссылка
Вот так можно:
from math import sqrt
'''
x+y = b => y = b-x
x*y = c => x*(b-x) = c => -x*x + b*x -c = 0
Так как a = -1 всегда в этой задаче, то я решил его не писать.
Решим квадратное уравнение:
'''
def calculate(b, c):
D = b*b + 4*c # считаем дискриминант
if D > 0: # если дискриминанат > 0 - два корня
sq = sqrt(D)/2
p = b/2
x1 = p-sq
x2 = p+sq
return [x1, x2]
def main():
b = int(input('Enter sum: '))
c = -int(input('Enter mul: '))
print(calculate(b, c))
main()
Автор решения: RomanR
→ Ссылка
Я бы решал солвером, не нужно думать о конкретное форме уравнений, просто добавляем условия и он решает сам.
from z3 import *
#создаем "решатель" и переменные (если нужны только целые решения, то "Int")
solver = Solver()
x = Int('x')
y = Int('y')
#список условий (писать не "=", а "==", так как это условия)
constraints = [
x + y == 22,
x * y == 120,
]
# для всех условий, добавляем их в решатель
for i in constraints:
solver.add(i)
# проверям, существует ли вообще решение если sat - решение найдено, unsat - решений не существует.
while solver.check() == sat:
# Если решение есть, то выводим его не экран
print("x = ", solver.model()[x], "y = ",solver.model()[y])
# Чтобы найти новое решение, добавляем условие, что x и y не равны только что найденному решению
solver.add(x != solver.model()[x], y != solver.model()[y])
**вывод**
x = 12 y = 10
x = 10 y = 12
Автор решения: user572157
→ Ссылка
Вот математическая формула: a=(s±√(s^2-4p))/2 s - это сумма p - это произведение