Метод 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).

Синтаксис

gofunc (z *Int) GCD(x, y, b *Int) *Int

Пример

Давайте вычислим НОД чисел 48 и 18:

gopackage 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)
}

Результат выполнения кода:

go6

Пример

Давайте вычислим НОД чисел 48 и 18, а также коэффициенты Безу:

gopackage 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)
}

Результат выполнения кода:

goGCD: 6
x: -1
y: 3

Проверяем: 48 * (-1) + 18 * 3 = -48 + 54 = 6, что действительно равно НОД.

Пример

Давайте вычислим НОД для отрицательных чисел:

gopackage 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)
}

Результат выполнения кода:

go6

НОД всегда неотрицательный, даже если исходные числа отрицательные.

Смотрите также

  • метод big.Int.Add,
    который складывает два больших числа
  • метод big.Int.Sub,
    который вычитает одно большое число из другого
  • метод big.Int.Mul,
    который умножает два больших числа
  • метод big.Int.Div,
    который делит одно большое число на другое