Форум сайта python.su
Всем привет!
Это мой второй в жизни код с циклом, я прямо совсем новичковый новичок, и видимо не понимаю какую-то очевидную вещь.
Задача: Программа должна считывать числа a и b (целые, положительные), каждое число вводится на отдельной строке, и выводит наименьшее число d, которое делится на оба этих числа без остатка.
a,b=int(input()),int(input()) d=1 n=1 while d==1: if n%a==0 and n%b==0: d=n print(d) n+=1
Отредактировано MNadezhda (Май 16, 2019 09:54:01)
Офлайн
MNadezhda
1) Что будет с вашим алгоритмом, если a = b = 1 ??
2) Алгоритм не эффективен, поскольку нет смысла искать n на значениях меньше max(a, b). Представим, что a = 777777, b=99999999999. Вы начинаете цикл с единицы, очевидно, что никакое число меньшее 99999999999 не поделится на него нацело.
3) Алгорит не эффективен ибо:
Допустим, a = 12, b = 21. Очевидно что никакие значения кроме членов последовательности 21, 42, 63, 84, 105, 126, 147… не могут быть ответом. Зачем вы итерируетесь с шагом 1?
4) Открываем википедию и читаем:
Нахождение НОК:
lcm(a,b)=|a * b| / gcd(a,b)
Отредактировано FishHook (Май 16, 2019 10:32:40)
Офлайн
@FishHook! Спасибо большое! Я поняла! Про единичку как-то вообще не подумала проверить. И теперь все получилось! Еще раз спасибо!
Офлайн