• Составить программу нахождения наименьшего общего кратного(НОК) двух чисел m и n, используя формулу n*m=НОД(m,n)*НОК(n,m). Разработать тесты для проверки правильности работы программы.

Ответы 2

  • Ответ:

    Если на паскале, то вот:

    Объяснение:

    var

       a, b: integer;

    function nod(a, b: integer): integer;

    begin

       while a * b <> 0 do

           if a > b then

               a := a mod b

           else

               b := b mod a;

       

       nod := a + b;

    end;

    begin

       readln(a, b);

       write('NOK = ', a * b / nod(a, b));

    end.

    • Автор:

      kahlua
    • 6 лет назад
    • 0
  • В программе на Питоне реализован алгоритм Евклида для нахождения НОД и найдено НОК из формулы из условия. Большая часть тестов для проверки использует случайные числа, для которых, например, проверяется, что НОК и НОД от (x, y) не изменяются, если их искать от (y, x), и т.д. (assert expr выбрасывает исключение, если expr ложно, так что если test сработало без ошибок, значит, всё ок)

    def gcd_lcm(a, b):

       x, y = a, b

       while x != 0 and y != 0:

           x, y = y % x, x

       gcd = x + y

       lcm = a // gcd * b

       return gcd, lcm

    def test():

       from random import randint

       x, y, z = [randint(1, 1000) for _ in range(3)]

       xx = gcd_lcm(x, x)

       xy = gcd_lcm(x, y)

       yx = gcd_lcm(y, x)

       yz = gcd_lcm(y, z)

       x1 = gcd_lcm(x, 1)

       zx_y = gcd_lcm(z * x, y)

       zx_zy = gcd_lcm(z * x, z * y)

       gcd_xy_z = gcd_lcm(xy[0], z)[0]

       gcd_x_yz = gcd_lcm(x, yz[0])[0]

       assert xx == (x, x)

       assert xy == yx

       assert xy[1] % xy[0] == 0

       assert xy[1] % x == 0

       assert xy[1] % y == 0

       assert x % xy[0] == 0

       assert y % xy[0] == 0

       assert x1[0] == 1

       assert x1[1] == x

       assert zx_y[0] % xy[0] == 0

       assert zx_y[1] % xy[1] == 0

       assert zx_zy[0] == z * xy[0]

       assert zx_zy[1] == z * xy[1]

       assert gcd_xy_z == gcd_x_yz

       assert gcd_lcm(2**7 * 3**15, 3**4 * 5**3) == (3**4, 2**7 * 3**15 * 5**3)

       assert gcd_lcm(7 * 917887, 7 * 850177) == (7, 7 * 850177 * 917887)

    if __name__ == "__main__":

       for _ in range(100):

           test()

  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years