Найти все возможные корни уравнения вида ax + by + cz = d

Возьмем такое уравнение:

5x + 10y + 15z = 100

Какие значения должны иметь переменные x, y и z, чтобы уравнение было верным, то есть каковы корни уравнения? Они могут быть такими: x = 1, y = 8, z = 1. Или такими: x = 4, y = 2, z = 4. Становится понятно, что корней у подобных уравнений может быть множество.

Требуется написать программу, выводящую на экран все возможные корни уравнения вида ax + by + cz = d, где a, b, c, d - известные коэффициенты, а x, y, z - переменные, которые требуется найти. При этом пусть все числа должны быть натуральными, то есть целыми и больше нуля.

Решается данная задача методом перебора всех возможных значений x, y, z с учетом их коэффициентов. Так если a = 10 и d = 100, то x может принять значения от 1 до 10, т. к. 10 * 10 = 100.

# Найти все возможные корни уравнения вида
# ax + by + cz = d, где a, b, c, d - задаются,
# x, y, z - требуется найти.
# Все числа (коэффициенты и переменные) - натуральные числа.
 
d = int(input('s = '))
a = int(input('a = '))
b = int(input('b = '))
c = int(input('c = '))
 
for i in range(1,d//a):
    for j in range(1,d//b):
        for k in range(1,d//c):
            if i*a + j*b + k*c == d:
                print("%d*%d + %d*%d + %d*%d = %d" % (a,i,b,j,c,k,d))

Пример выполнения кода:

s = 20
a = 2
b = 4
c = 6
2*1 + 4*3 + 6*1 = 20
2*2 + 4*1 + 6*2 = 20
2*3 + 4*2 + 6*1 = 20
2*5 + 4*1 + 6*1 = 20

Обычно подобные задачи решают в ином контексте. Требуется найти, сколько различных товаров можно купить на определенную сумму.

summa = int(input("Сколько у вас денег? "))
subj1 = int(input("Цена экземпляра товара 1: "))
subj2 = int(input("Цена экземпляра товара 2: "))
subj3 = int(input("Цена экземпляра товара 3: "))
 
for i in range(1, summa // subj1):
    for j in range(1,summa // subj2):
        for k in range(1,summa // subj3):
            if subj1 * (i) + subj2*(j)+subj3*(k) == summa: 
                print(i,j,k)

Пример выполнения кода:

Сколько у вас денег? 100
Цена экземпляра товара 1: 10
Цена экземпляра товара 2: 20
Цена экземпляра товара 3: 30
1 3 1
2 1 2
3 2 1
5 1 1

При этом если ставится условие, чтобы всего количество предметов равнялось какому-то числу или было не меньше какого-то числа, то в условии инструкции if следует через логический оператор and добавить второе условие (например, a + b + c > 5).

Создано

Обновлено