Метод big.Int.GCD
Метод big.Int.GCD вычисляет наибольший общий делитель (НОД) для двух чисел типа big.Int.
В первый параметр (x) метод записывает коэффициенты Безу для числа a,
во второй параметр (y) - коэффициенты Безу для числа b.
Сам НОД возвращается как результат метода. Если параметры x или y равны nil,
то соответствующие коэффициенты не вычисляются.
Метод принимает три аргумента: x, y и b.
При этом a является получателем метода (z).
Метод вычисляет такие коэффициенты x и y, что a*x + b*y = gcd(a, b).
Синтаксис
func (z *Int) GCD(x, y, b *Int) *Int
Пример
Давайте вычислим НОД чисел 48 и 18:
package main
import (
"fmt"
"math/big"
)
func main() {
a := big.NewInt(48)
b := big.NewInt(18)
gcd := new(big.Int)
res := gcd.GCD(nil, nil, b)
fmt.Println(res)
}
Результат выполнения кода:
6
Пример
Давайте вычислим НОД чисел 48 и 18, а также коэффициенты Безу:
package main
import (
"fmt"
"math/big"
)
func main() {
a := big.NewInt(48)
b := big.NewInt(18)
x := new(big.Int)
y := new(big.Int)
gcd := new(big.Int)
res := gcd.GCD(x, y, b)
fmt.Println("GCD:", res)
fmt.Println("x:", x)
fmt.Println("y:", y)
}
Результат выполнения кода:
GCD: 6
x: -1
y: 3
Проверяем: 48 * (-1) + 18 * 3 = -48 + 54 = 6, что действительно равно НОД.
Пример
Давайте вычислим НОД для отрицательных чисел:
package main
import (
"fmt"
"math/big"
)
func main() {
a := big.NewInt(-48)
b := big.NewInt(-18)
gcd := new(big.Int)
res := gcd.GCD(nil, nil, b)
fmt.Println(res)
}
Результат выполнения кода:
6
НОД всегда неотрицательный, даже если исходные числа отрицательные.
Смотрите также
-
метод
big.Int.Add,
который складывает два больших числа -
метод
big.Int.Sub,
который вычитает одно большое число из другого -
метод
big.Int.Mul,
который умножает два больших числа -
метод
big.Int.Div,
который делит одно большое число на другое