Проект Эйлера: Задача 5. Наименьшее кратное
Имеется следующая задача
Написал вот такой код:
from random import randint as random
own = []
while len(own) != 1:
num = random(1, 100000)
temp = []
# Генерация 20-ти чисел которые будут делиться на случайное число.
for i in range(1, 21):
while i != 20:
temp.append(int(num) / i)
# Проверка на наличие дробного числа в списке.
for o in temp:
if type(o) == float:
temp.clear()
else:
continue
if len(temp) == 20:
own.append(num)
else:
pass
Результата никакого он не выдаёт, просто работает и всё. Большая просьба - объяснить, что не так с кодом, и как мне можно написать его для правильной работы. Может Вы знаете алгоритмические способы, подходящие для такой задачи - я с удовольствием изучу их и использую. Но, пожалуйста, не нужно писать сам код который решает проблему, т.к. я начинающий в этой области - хочу сам попрактиковаться в написании кода. Спасибо! :)
Ответы (4 шт):
Возможно проблема вашего кода в том , что в нём отсутствует return или же print поэтому никакого вывода в консоль не происходит. Я знаю , что вы просили не скидывать вам полный код , но всё же рекомендую ознакомиться с данной ссылкой в ней разобран весь алгоритм простым и понятными языком. Если вы его как следует изучите в будущем вам будет проще.
В for i in range(1,21): есть цикл while i != 20, он выполняется бесконечно, начнёт выполнятся при i = 1, а в самом цикле i не изменяется.
Задачу можно решить с помощью разложения на множители.
Разложим каждое число по степеням простых чисел.
Результат это наименьшее общее кратное - т.е. берем каждое простое число в наибольшей степени
primes = [2, 3, 5, 7, 11, 13, 17, 19] res = {2: 0, 3: 0, 5: 0, 7: 0, 11: 0, 13: 0, 17: 0, 19: 0} def get_powers(n, primes): pr = {} for p in primes: if n % p == 0: pr[p] = 0 while (n % p == 0): pr[p] += 1 n = n / p return pr def merge_powers(pr, res): for p in pr: res[p] = max(pr[p], res[p]) return res n = 20 for i in range(2, n + 1): pr = get_powers(i, primes) res = merge_powers(pr, res) result = 1 for p in res: if res[p]>0: result = result * (p**res[p]) print(result)
def lcm(a, b):
m = a * b
while a != 0 and b != 0:
if a > b:
a %= b
else:
b %= a
return m // (a + b)
while 1:
try:
x = int(input('a = '))
y = int(input('b = '))
print('НОК:', lcm(x, y))
except ValueError:
break