Наибольший общий делитель
Бинарный алгоритм нахождения (Википедия)
on GCD(a, b)
if (a = 0) then
return b
else if (b = 0) then
return a
else if (a = b) then
return a
else if ((a = 1) or (b = 1)) then
return 1
else if ((a mod 2 = 0) and (b mod 2 = 0)) then
return 2 * (GCD(round (a / 2), round (b / 2)))
else if ((a mod 2 = 0) and (not (b mod 2 = 0))) then
return (GCD(round (a / 2), b))
else if ((not (a mod 2 = 0)) and (b mod 2 = 0)) then
return (GCD(a, round (b / 2)))
else if ((not (a mod 2 = 0)) and (not (b mod 2 = 0))) then
return (GCD(b, abs(a - b)))
end if
end GCD
if (a = 0) then
return b
else if (b = 0) then
return a
else if (a = b) then
return a
else if ((a = 1) or (b = 1)) then
return 1
else if ((a mod 2 = 0) and (b mod 2 = 0)) then
return 2 * (GCD(round (a / 2), round (b / 2)))
else if ((a mod 2 = 0) and (not (b mod 2 = 0))) then
return (GCD(round (a / 2), b))
else if ((not (a mod 2 = 0)) and (b mod 2 = 0)) then
return (GCD(a, round (b / 2)))
else if ((not (a mod 2 = 0)) and (not (b mod 2 = 0))) then
return (GCD(b, abs(a - b)))
end if
end GCD
Модуль числа. Abs.
on abs(a)
if (a < 0) then
return (-1) * a
else
return a
end if
end abs
if (a < 0) then
return (-1) * a
else
return a
end if
end abs
