2012-01-11 3 views
1

Я знаю, что это классический вопрос интервью, но вот моя быстрая попытка создать функцию, которая возвращает наименьшее общее кратное двух чисел, то, что я никогда не должен делать в моей повседневной работе:Как найти самый низкий общий кратный двух чисел?

def calc_common_multiplyer(int_low, int_high) 
    i = 1 
    int_high_res = [] 

    while true 
    int_high_res << int_high * i 
    if int_high_res.include?(int_low * i) 
     return int_low * i 
    end 
    i = i+1 
    end 
end 

I чувствую, что это очень неуклюже. Существует ли более эффективное или стандартное решение?

+0

ли это как вы решите эту проблему на бумаге? –

+0

Я дал себе лимит в 4 минуты, чтобы ответить на этот вопрос, возможно, в два раза больше, чем нужно, и именно это я и создал. Вероятно, сделал бы то же самое на бумаге. – Jason

ответ

10

Я хотел бы сделать это в Ruby:

x.lcm(y) 

:)

+0

Ницца - лучше начать перечитывать Ruby API! :) – Jason

+0

@Mark Thomas, почему бы не добавить ссылку и образец, показывающий, как это работает? –

+0

@theTinMan Обычно я делаю, но был коротким по времени. –

3

Сначала вычислить наибольший общий делитель (например, с Euclidean algorithm), затем

lcm(a,b) = if a == 0 && b == 0 then return 0 else return (a*b)/gcd(a,b) 
-1
def find_lcm(n,m) 
    n, m = m, n if m < n 
    count = m 
until count % n == 0 
    count += m 
end 
count 
end 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – Carpetsmoker

Смежные вопросы