Нахождения числа зная только сумму и произведение

Каким образом можно получить числа, зная только сумму и произведение в 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 - это произведение

→ Ссылка