47 lines
1.1 KiB
Bash
Executable File
47 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Скрипт для нахождения НОК (наименьшего общего кратного) двух чисел
|
||
# НОК(a,b) = |a*b| / НОД(a,b)
|
||
|
||
# Проверяем, переданы ли два аргумента
|
||
if [ $# -ne 2 ]; then
|
||
echo "Использование: $0 <число1> <число2>"
|
||
exit 1
|
||
fi
|
||
|
||
# Проверяем, являются ли аргументы числами
|
||
if ! [[ $1 =~ ^[0-9]+$ ]] || ! [[ $2 =~ ^[0-9]+$ ]]; then
|
||
echo "Ошибка: аргументы должны быть неотрицательными целыми числами"
|
||
exit 1
|
||
fi
|
||
|
||
a=$1
|
||
b=$2
|
||
|
||
# Проверка на ноль
|
||
if [ $a -eq 0 ] || [ $b -eq 0 ]; then
|
||
echo "НОК($1, $2) = 0"
|
||
exit 0
|
||
fi
|
||
|
||
# Функция для нахождения НОД с помощью алгоритма Евклида
|
||
gcd() {
|
||
local x=$1
|
||
local y=$2
|
||
while [ $y -ne 0 ]; do
|
||
local remainder=$((x % y))
|
||
x=$y
|
||
y=$remainder
|
||
done
|
||
echo $x
|
||
}
|
||
|
||
# Вычисляем НОД
|
||
gcd_result=$(gcd $a $b)
|
||
|
||
# Вычисляем НОК
|
||
lcm_result=$(( (a * b) / gcd_result ))
|
||
|
||
echo "НОК($1, $2) = $lcm_result"
|
||
|