Наименьшее общее кратное пар чисел
Найти наименьшее общее кратное (НОК) пар целых положительных чисел через наибольший общий делитель (НОД) по формуле lcm = ab / gcd(a; b), где lcm — НОК, gcd — НОД, a и b — числа.
В основной ветке программы запрашиваются два числа, которые передаются в функцию, вычисляющую и возвращающую НОК.
В самой функции переменная, которой присваивается произведение переданных значений, имеет тип longint, т.к. диапазона ни integer, ни даже word может быть недостаточно.
Произведение следует найти до того, как будет найден НОД, т.к. в процессе его вычисления значения переменных-чисел уменьшается. НОД содержится в одной переменной-числе, но поскольку вторая в любом случае содержит 0, и мы не знаем, какая что именно содержит, то проще их сложить.
Программа на языке Паскаль:
var a, b: word; function lcm(c, d: word): word; var mult: longint; begin mult := c * d; while (c <> 0) and (d <> 0) do if c > d then c := c mod d else d := d mod c; lcm := mult div (c + d); end; begin repeat write('Two numbers: '); readln(a,b); if (a = 0) and (b = 0) then break; writeln('LCM: ', lcm(a,b)); until (a = 0) and (b = 0); end.
Пример выполнения программы:
Two numbers: 800 899 LCM: 63840 Two numbers: 15 16 LCM: 240 Two numbers: 121 212 LCM: 25652 Two numbers: 25 30 LCM: 150 Two numbers: 0 0
Найти наименьшее общее кратное двух натуральных чисел
Формулировка. Даны два натуральных числа. Найти их наименьшее общее кратное.
Примечание: наименьшим общим кратным двух чисел m и n называется наименьшее натуральное число, которое делится на m и n. Обозначение: НОК(m, n)
Решение. Из теории чисел известно, что НОК(m, n) связан с НОД(m, n) следующим образом:
Следовательно, для нахождения ответа нам нужно лишь использовать предыдущую задачу нахождения НОД двух чисел m иn:
while m <> n do begin
if m > n then begin
Так как исходные переменные будут испорчены в процессе работы алгоритма Евклида, нам нужно вычислить их произведение до входа в описанный выше цикл и присвоить это произведение переменной prod (от англ. product – «произведение»):
После этого нам остается вывести на экран результат арифметического выражения в правой части нашей формулы. В качестве самого НОД будет использоваться переменная m:
writeln(prod div m);
Кстати, деление в формуле будет целочисленным (через div) именно потому, что если два числа делятся на некоторое число, то и их произведение также делится на него.
Код:
- program LeastCommonMult;
- var
- m, n, prod: word;
- begin
- readln(m, n);
- prod := m * n;
- while m <> n do begin
- if m > n then begin
- m := m — n
- end
- else begin
- n := n — m
- end
- end;
- writeln(prod div m)
- end.
Помогите сделать программу в паскале Найти НОК (наименьшее) трёх чисел
Наименьшее общее кратное (НОК) двух целых чисел a и b есть наименьшее натуральное число, которое делится на a и b. Обычно обозначается [a,b], а иногда НОК (m,n) или LCM(a,b). Например, НОК (16,24)=48.
Для нахождения НОК удобно использовать следующее свойство: для любых натуральных чисел a и b верно равенство НОД (a,b)*НОК (a,b)=a*b, откуда получаем, что НОК (a,b)=a*b/НОД (a,b).
read(a,b);
while a*b > 0 do
if a >= b then a = a mod b else b = b mod a;
write(a+b);
PS: Можно обойтись обычным перебором — но это не совсем корректный вариант.
Программа НОК и НОД — Паскаль
Здесь приведен код программы на языке Паскаль. Программа вычисляет НОД и НОК с использованием алгоритма Евклида. Наибольшим общим делителем (НОД) для двух целых чисел m и n называется наибольший из их общих делителей. Приведем пример: для чисел 70 и 105 наибольший общий делитель будет равен 35. НОД существует и однозначно определён, если хотя бы одно из чисел m или n не ноль. Наименьшее общее кратное (НОК) двух целых чисел m и n есть наименьшее натуральное число, которое делится на m и n. Например, для 3 и 5, НОК равен 15, а для 2 и 4 НОК равен 4.
program nodnok; var a,b:longint; function NOD(x,y:longint):longint; begin if x<>0 then NOD:= NOD(y mod x,x) else NOD:= y; end; function NOK(x,y:longint):longint; begin NOK:= (x div NOD(x,y)) * y; end; Begin Write('Введите a и b: '); Readln(a,b); Writeln('НОД ',a,' и ',b,' = ', NOD(a,b)); Writeln('НОК ',a,' и ',b,' = ', NOK(a,b)); Readln; End.