Cумма делителей числа

n = int(input())
total = 0
total1 = 0
for i in range(1, n + 1):
    print(i, end='')
    for j in range(1, i + 1):
        if i % j == 0:
            total += 1
        print('+' * total1, end='')
    print()

На вход программе подается натуральное число nn. Напишите программу, выводящую графическое изображение делимости чисел от 1 до n включительно. В каждой строке надо напечатать очередное число и столько символов «+», сколько делителей у этого числа.

Формат входных данных На вход программе подается одно натуральное число.

Формат выходных данных Программа должна вывести графическое изображение чисел от 11 до nn, каждое на отдельной строке. Подскажите что поправить надо.


Ответы (4 шт):

Автор решения: Danis
n = int(input())
for i in range(11, n + 1):
    count = 0
    for j in range(1, i + 1):
        if i % j == 0:
            count += 1
    print(i, '+' * count) 
→ Ссылка
Автор решения: Krovorgen
n = int(input())
for i in range(1, n + 1):
    print(i, end='')
    for j in range(1, i + 1):
        if i % j == 0:
            print('+', end='')
    print()
→ Ссылка
Автор решения: Zhihar

чуть-чуть короче (нет) :)

версия 1:

n = int(input())
for i in range(11, n + 1):
    print(i, '+' * len(list(filter(lambda x: i % x == 0, range(1, i + 1)))), sep='')

версия 2:

n = int(input())
for i in range(11, n + 1):
    print(i, '+' * len(list(filter(lambda x: not(i % x), range(1, i + 1)))), sep='')

версия 3:

Хватит разврата и откопал стюардессу

n = int(input())
print("\n".join(map(lambda i: str(f'{i}' + '+' * len(list(filter(lambda x: not(i % x), range(1, i + 1))))), range(11, n + 1))))

версия 4:

print("\n".join(map(lambda i: str(f'{i}' + '+' * len(list(filter(lambda x: not(i % x), range(1, i + 1))))), range(11, int(input()) + 1))))

версия 5, окончательная (покороче):

print("\n".join(map(lambda i: f'{i}' + '+' * len(list(filter(lambda x: not(i % x), range(1, i + 1)))), range(11, int(input()) + 1))))
→ Ссылка
Автор решения: Semitron

Решение без сложных функция, но работает быстрее, чем вложенные циклы:

for i in range(1, int(input()) + 1):
    print(i, *['+' * (i % j == 0) for j in range(1, i + 1)], sep='')
→ Ссылка