From 380c270a88264acf305634e96c6c622897e05f97 Mon Sep 17 00:00:00 2001 From: filifa Date: Mon, 11 Aug 2025 20:43:19 -0400 Subject: [PATCH] add gcd command --- cmd/gcd.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 cmd/gcd.go diff --git a/cmd/gcd.go b/cmd/gcd.go new file mode 100644 index 0000000..46d498a --- /dev/null +++ b/cmd/gcd.go @@ -0,0 +1,66 @@ +/* +Copyright © 2025 filifa + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +package cmd + +import ( + "fmt" + "log" + "math/big" + + "github.com/spf13/cobra" +) + +func gcd(cmd *cobra.Command, args []string) { + var x big.Int + var y big.Int + var z big.Int + var w big.Int + + for _, s := range args { + _, ok := w.SetString(s, 10) + if !ok { + log.Fatal("invalid input " + s) + } + + z.GCD(&x, &y, &z, &w) + } + + fmt.Println(&z) +} + +// gcdCmd represents the gcd command +var gcdCmd = &cobra.Command{ + Use: "gcd", + Short: "Compute the greatest common denominator of a set of numbers", + Long: `Compute the greatest common denominator of a set of numbers.`, + Args: cobra.MinimumNArgs(2), + Run: gcd, +} + +func init() { + rootCmd.AddCommand(gcdCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // gcdCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // gcdCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +}