Задача о зубчатой передаче
Всем доброго времени суток, подкинули нашей группе такую вот не сложную задачку:
Зубчастая передача состоит из N шестерней, оси оборотов которых находятся на одной прямой. На шестернях нанесены одинаковые метки, которые в начальном состоянии механизма попарно совпадают.Сколько оборотов сделает первая шестерня до того, когда метки на всех шестернях совпадут. Вводим число n - само количество шестерней, дальше через пробел N чисел, x1,x2,xn кол-во зубов каждой шестеренку, вывести через сколько оборотов метки совпадут. Препод дал небольшой пример: Ввод 3 8 15 12 Вывод 15.
Вообщем насколько я верно все понял задача решается с помощью нок, то есть надо из введенных значений, найти найменьшое число которой будет собственно делится на N, в примере это число 15. Собственно как я описал функцию НОК:
Код Pascal
Но как именно осуществить проверку введенных чисел на НОК с первым, думал сделать так:
Но вариантов таких может быть не и не 3, поэтому тут как-раз и стоит вопрос.Я думаю что алгоритм мой верный, надеюсь на вашу помощь, заранее спасибо.
Всем доброго времени суток, подкинули нашей группе такую вот не сложную задачку:
Зубчастая передача состоит из N шестерней, оси оборотов которых находятся на одной прямой. На шестернях нанесены одинаковые метки, которые в начальном состоянии механизма попарно совпадают.Сколько оборотов сделает первая шестерня до того, когда метки на всех шестернях совпадут. Вводим число n - само количество шестерней, дальше через пробел N чисел, x1,x2,xn кол-во зубов каждой шестеренку, вывести через сколько оборотов метки совпадут. Препод дал небольшой пример: Ввод 3 8 15 12 Вывод 15.
Вообщем насколько я верно все понял задача решается с помощью нок, то есть надо из введенных значений, найти найменьшое число которой будет собственно делится на N, в примере это число 15. Собственно как я описал функцию НОК:
Код Pascal
Код:
function Nod(a,b:integer):integer;
begin
while(a<>0) and (b<>0) do
if a>=b then a:= a mod b
else b:= b mod a;
NOD:=a+b;
end;
function NOK(a,b:integer):integer;
begin
NOK:=a*b div NOd(a,b)
end;
Код:
if (NOK(n,x) < NOK(n,x1)) then Writeln(x);