e-olymp 1243. Наименьшее общее кратное

Условие

Наименьшим общим кратным ($НОК$) множества натуральных чисел называется такое наименьшее натуральное число, которое делится на каждое число в этом множестве. Например, $НОК$ чисел $5$, $7$ и $15$ равно $105$.

Вам необходимо найти $НОК$ $m$ заданных чисел.

Входные данные

Первая строка содержит количество тестов. Каждый тест состоит из одной строки и содержит числа $m$ $n_1$ $n_2$ $n_3$ $\ldots$ $n_m$, где $m$($1 \leqslant m \leqslant 100$) — количество заданных чисел, $n_1$ $\ldots$ $n_m$ — сами числа. Все числа натуральные и лежат в границах $32$-битового целого.

Выходные данные

Для каждого теста в отдельной строке вывести соответствующее значение $НОК$. Все выводимые числа лежат в границах $32$-битового целого.

Тесты

ввод вывод
1 2
3 5 7 15
6 4 10296 936 1287 792 1
105
10296
2 3
1 36
5 2 2 2 2 2
5 987 1597 2584 4181 6765 10946 17711
36
2
38400890173772280
3 0

Код

Код с алгоритмом Евклида

Решение

$\DeclareMathOperator{\lcm}{lcm}$
$НОК$ ($\lcm$) проще всего считается по формуле $\operatorname {lcm}(a,b)={\frac {|a\cdot b|}{\operatorname {gcd}(a,b)}}$, где $\gcd$ — $НОД$. Для $\lcm$ от более чем двух чисел справедлива следующая формула: $\operatorname {lcm}(a_{1},a_{2},\ldots ,a_{n})=\operatorname {lcm}(\operatorname {lcm}(a_{1},a_{2},\ldots ,a_{{n-1}}),a_{n})$, из которой видно, что подсчёт $\lcm$ от $n$ чисел сводится к вычислению $n-1$-ого $\lcm$ от очередного числа и предыдущего результата вычислений.

$НОД$ ($\gcd$) в коде считается при помощи стандартной функции __gcd(a, b) из стандартной библиотеки algorithm в первом варианте кода или по алгоритму Евклида во втором.

Ссылки

Related Images:

One thought on “e-olymp 1243. Наименьшее общее кратное

  1. — Пожалуйста, сделайте знаки меньше либо равно такими, как в Ваших учебниках.
    — Функции НОД и НОК в формулах то наклонные, то прямые. Используйте везде прямое начертание для математических функций.
    — Зачем эта чехарда в строка 11 и 12? Что мешает сразу прочесть в нужную переменную?
    — Зачем умножение перед делением брать в скобки? Чтобы получить число побольше? Я бы еще понял, если бы вы деление брали в скобки. Тогда можно везде int использовать.
    — Ну, и ваша функция вычисления НОД мне не очень нравится. Зачем каждый раз проверять кто больше? После первого вычисления остатка от деления уже ясно, кто больше. Можно было, например так написать:

    Хотя, не сильно лучше вышло. Я всегда так пишу:

    Короче получается. Но, давайте оставим Ваш вариант. Не такой уж он и плохой.

Добавить комментарий