saa002
?>

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

Информатика

Ответы

zhmulyov-denis8

ответ:

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

объяснение:

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.

kirycha-2000719

в программе на питоне реализован алгоритм евклида для нахождения нод и найдено нок из формулы из условия. большая часть тестов для проверки использует случайные числа, для которых, например, проверяется, что нок и нод от (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,

    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()

e3913269
Поскольку тут речь о последовательности неизвестной длины, вводимой с клавиатуры до появления нуля, а условие позволяет для каждого вводимого числа сразу решить, должно ли оно входить в сумму, решается без использования массива и условие " количество чисел не превышает 1000" - это просто ловушка для наивных с тем, чтобы в случае использования массива длиной 1000 объявить затем решение неэффективным по памяти. 1. решение на современной версии паскаля pascalabc.net 3.2, сборка 1389 от 01.03.2017 внимание! если программа не работает, обновите версию! begin   var s: =readseqintegerwhile(n-> n< > 0)           .where(n-> (n mod 3=0) and (n mod 10=;   writeln('сумма отобранных чисел равна ',s)      end. пример 15 36 26 72 25 96 83 0 сумма отобранных чисел равна 132 2. решение "по-школьному" var   n,s: integer; begin   s: =0;   repeat       read(n);       if (n mod 3=0) and (n mod 10=6) then s: =s+n   until n=0;   writeln('сумма отобранных чисел равна ',s) end. пример 15 36 26 72 25 96 83 0 сумма отобранных чисел равна 132
Popova838
Uses crt; var  n, i, s: integer;   a: array [1..1000] of integer; begin  writeln('введите количество чисел последовательности'); read(n);   s : = 0;   writeln('введите числа');   for i : = 1 to n do  begin   read(a[i]);     a[n] : = 0;   end;   writeln();   for i : = 1 to n do    write(a[i], ' ');   writeln();   for i : = 1 to n do    s : = s + a[i];   writeln('сумма=', s); end.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

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

Популярные вопросы в разделе

Nadirovich1317
Amulenkov
evamining
Olga1509
Lianchikavon
Koshkina Alekseevna
varvara82193
Голубева1440
Agadzhanyan-Ekaterina
Zheleznyakova
GridnevaVNIGNI&quot;
libirishka7910
EkaterinaSEMENOV702
vlrkinn
Stanislavovna1237