From d507a6429d8ec111cbd6dc3a9c3e12420d938bb4 Mon Sep 17 00:00:00 2001 From: filifa Date: Mon, 11 Aug 2025 22:54:43 -0400 Subject: [PATCH] compute bezout coefficients for 3 or more inputs --- cmd/gcd.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/cmd/gcd.go b/cmd/gcd.go index fa6a1af..31c7a44 100644 --- a/cmd/gcd.go +++ b/cmd/gcd.go @@ -32,21 +32,32 @@ func gcd(cmd *cobra.Command, args []string) { var z big.Int var w big.Int - if extended && len(args) > 2 { - log.Fatal("--extended unsupported for more than two values") - } + coeffs := make([]big.Int, len(args)) - for _, s := range args { + for i, s := range args { _, ok := w.SetString(s, 10) if !ok { log.Fatal("invalid input " + s) } z.GCD(&x, &y, &z, &w) + + for j, c := range coeffs { + if j == i { + coeffs[j].Set(&y) + } else { + coeffs[j].Mul(&c, &x) + } + + } } if extended { - fmt.Println(&z, &x, &y) + fmt.Print(&z) + for _, c := range coeffs { + fmt.Printf(" %s", &c) + } + fmt.Println() } else { fmt.Println(&z) }