Программа, которая для каждого 1<=n<=100 находит наименьшее треугольное число, кратное n, сумма цифр которого также кратна n. Как её ускорить?
# Программа,
# которая для каждого 1<=n<=100
# находит наименьшее треугольное число,
# кратное n, сумма цифр которого также n.
def triangle_number(n):
return n * (n + 1) // 2
def digit_sum(n):
return sum(map(int, str(n)))
for n in range(1, 101):
k = 1
while True:
tn = triangle_number(k)
if tn % n == 0 and digit_sum(tn) % n == 0 and digit_sum(tn) != 0:
print(f"n = {n}, k = {k}, tn = {tn}")
break
k += 1
Данная программа работает чересчур медленно, поэтому успевает вывести только первые 39 нужных чисел из ста. Получается последовательность: 1, 6, 3, 1128, 55, 6, 1596, 15576, 36, 190, 163878, 1128, 378885 тощо.
Пожалуйста, помогите оптимизировать код таким образом, чтобы выводились все 100 требуемых чисел.