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

Тема: 
Циклы

Возьмем, например, такое уравнение: 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 - переменные (требуется найти). При этом пусть все числа должны быть натуральными числами (т. е. > 0).

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

# Найти все возможные корни уравнения вида
# ax + by + cz = d, где a, b, c, d - задаются,
# x, y, z - требуется найти.
# Все числа (коэффициенты и переменные) - натуральные числа (т.е. > 0).
 
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).