Реализации алгоритмов/Алгоритм Евклида: различия между версиями

Содержимое удалено Содержимое добавлено
Добавлены итеративные реализации на Go
Строка 174:
<source lang="forth">
: GCD ( n1 n2 -- n ) tuck mod 0; GCD ;
</source>
 
==[[w:Go|Go]]==
Тип <code>IntType</code> определён как:
<source lang="go">
type IntType = int // Вместо int можно подставить любой другой целочисленный тип
</source>
 
Для корректной обработки отрицательных чисел все последующие примеры на Go используют функцию вычисления модуля числа:
<source lang="go">
func IntAbs(value IntType) IntType {
if value < 0 {
return -value
}
return value
}
</source>
 
Деление с остатком, цикл:
<source lang="go">
func GCD(a, b IntType) IntType {
for b != 0 {
a %= b
if a == 0 {
return IntAbs(b)
}
b %= a
}
return IntAbs(a)
}
</source>
 
Вычитание, цикл:
<source lang="go">
func GCD(a, b IntType) IntType {
a = IntAbs(a)
b = IntAbs(b)
for b != 0 {
for a >= b {
a -= b
}
if a == 0 {
return b
}
for b >= a {
b -= a
}
}
return a
}
</source>