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
请输入第一个数:
 */

相关推荐

  1. C#公约数算法 vs 辗转相除

    2024-03-12 01:02:02       20 阅读
  2. C语言求解公约数算法的应用)

    2024-03-12 01:02:02       13 阅读
  3. C语言两数公约数辗转相除法)

    2024-03-12 01:02:02       32 阅读
  4. 算法

    2024-03-12 01:02:02       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-12 01:02:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-12 01:02:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-12 01:02:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-12 01:02:02       18 阅读

热门阅读

  1. 如何在Ubuntu上部署最新的Google Chrome和ChromeDriver

    2024-03-12 01:02:02       24 阅读
  2. c++基础学习第四天(内存分区,引用)

    2024-03-12 01:02:02       20 阅读
  3. 010-$nextTick

    2024-03-12 01:02:02       19 阅读
  4. 浏览器内核小知识

    2024-03-12 01:02:02       19 阅读
  5. Linux报错排查-安装PHP的remi库报错

    2024-03-12 01:02:02       21 阅读
  6. 设计模式-适配器模式

    2024-03-12 01:02:02       27 阅读
  7. 热销商品-爬虫销量信息

    2024-03-12 01:02:02       19 阅读
  8. 【PICO 4教程】Unity3D中实现对PICO 4的手柄按键响应

    2024-03-12 01:02:02       19 阅读
  9. Linux: 调用接口

    2024-03-12 01:02:02       19 阅读
  10. 使用Docker安装Redis并运行

    2024-03-12 01:02:02       25 阅读
  11. springboot之异步任务、邮件任务、定时任务

    2024-03-12 01:02:02       19 阅读
  12. 记一次面试经历

    2024-03-12 01:02:02       23 阅读