C#求最大公约数: 欧几里得算法 vs 辗转相除法

2024-03-12 1277阅读

温馨提示:这篇文章已超过374天没有更新,请注意相关的内容是否还可用!

目录

C#求最大公约数: 欧几里得算法 vs 辗转相除法
(图片来源网络,侵删)

1.最大公约数

2.欧几里得算法

3.辗转相除法


1.最大公约数

        最大公约数(Greatest Common Divisor,GCD)是两个或多个整数共有的最大的能被无余地整除的数。例如,12 和 18 的最大公约数是 6。最大公约数可以通过辗转相除法、欧几里得算法(或更相减损术等方法)求解。

2.欧几里得算法

        欧几里得算法(Euclidean Algorithm)是一种用于计算两个整数的最大公约数的高效算法,基于以下原理:如果 n1 和 n2 是两个整数,且 n1 > n2,那么 n1 和 n2 的最大公约数等于 n2 和 n1%n2 的最大公约数。这个算法会不断将较大的数替换为较小的数,并将较小的数替换为两者的余数,直到较小的数为 0,此时较大的数就是两个数的最大公约数。

// 欧几里得算法(Euclidean Algorithm)实现求最大公约数
namespace _138
{
    class Program
    {
        public static float GreatestComDivisor(int n1, int n2)
        {
            int temp = Math.Max(n1, n2);//求两个数的最大值
            n2 = Math.Min(n1, n2);      //求两个数中的最小值
            n1 = temp;                  //记录临时值
            while (n2 != 0)
            {
                n1 = n1 > n2 ? n1 : n2; //使n1中的数大于n2中的数
                int m = n1 % n2;        //记录n1求余n2的结果
                n1 = n2;                //交换两个数
                n2 = m;                 //记录求余结果
            }
            return n1;
        }
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
            while (true)
            {
                Console.Write("请输入第一个数:");
                int n1 = Convert.ToInt32(Console.ReadLine());//记录第一个数
                Console.Write("请输入第二个数:");
                int n2 = Convert.ToInt32(Console.ReadLine());//记录第二个数
                if (n1 * n2 != 0)                            //判断两个数中的一个是否为0
                {
                    Console.WriteLine("最大公约数:" + GreatestComDivisor(n1, n2));
                }
                else
                {
                    Console.WriteLine("这两个数不能为0。");
                }
            }
        }
    }
}
//运行结果:
/*
请输入第一个数:12
请输入第二个数:18
最大公约数:6
请输入第一个数:34
请输入第二个数:17
最大公约数:17
请输入第一个数:
 */

3.辗转相除法

        辗转相除法(也称为更相减损术)。辗转相除法是一种用于计算两个整数的最大公约数的算法,基于以下原理:如果 a 和 b 是两个整数,且 a > b,那么 a 和 b 的最大公约数等于 b 和 a % b 的最大公约数。这个算法会不断将较大的数替换为较小的数,并将较小的数替换为两者的余数,直到较小的数为 0,此时较大的数就是两个数的最大公约数。

// 用辗转相除法计算两个整数的最大公约数
namespace _138_1
{
    class Program
    {
        public static int GreatestComDivisor(int a, int b)
        {
            while (b != 0)
            {
                int remainder = a % b;
                a = b;
                b = remainder;
            }
            return a;
        }
        static void Main(string[] args)
        {
            ArgumentNullException.ThrowIfNull(args);
            while (true)
            {
                Console.Write("请输入第一个数:");
                int n1 = Convert.ToInt32(Console.ReadLine());//记录第一个数
                Console.Write("请输入第二个数:");
                int n2 = Convert.ToInt32(Console.ReadLine());//记录第二个数
                if (n1 * n2 != 0)                                             //判断两个数中的一个是否为0
                {
                    Console.WriteLine("最大公约数:" + GreatestComDivisor(n1, n2));
                }
                else
                {
                    Console.WriteLine("这两个数不能为0。");
                }
            }
        }
    }
}
//运行结果:
/*
请输入第一个数:12
请输入第二个数:18
最大公约数:6
请输入第一个数:34
请输入第二个数:17
最大公约数:17
请输入第一个数:
 */
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]