C# 在线求多个自然数的最大公约数和最小公倍数

最近在找有关求最大公约数和最小公倍数的有关算法,找来找去都是两个自然数的,没有多个整数的相关的算法,思考了一下,做了一个支持多个的自然数的,直接上代码

    //求两个数中的比较大的
     static long GetMax(long a, long b)
        {
            return a > b ? a : b;
        }

    //求两个数中的比较小的
        static long GetMin(long a, long b)
        {
            return a < b ? a : b;
        }
    /// <summary>
        /// 求集合的的公约数
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static IList<long> GetYueShus(IList<long> data)
        {
            List<long> list = new List<long>(data);
            long min = 1, max = 1;
            for (int i = 1; i < list.Count; i++)
            {
                max = GetMax(list[i - 1], list[i]);
                min = GetMin(list[i - 1], list[i]);
                while (max % min != 0)//辗转相除算法
                {
                    list[i - 1] = min;
                    list[i] = max % min;
                    max = GetMax(list[i - 1], list[i]);
                    min = GetMin(list[i - 1], list[i]);
                    if (min == 1) //如果已经是1了,就退出循环
                        break;
                }
                if (min == 1) //如果已经是1了,就退出循环
                    break;
            }
            return GetYueShu(min);
        }
 //求某一个整数的约数集
 public static IList<long> GetYueShu(long n)
        {
            IList<long> data = new List<long>();
            if (n < 1)
                return data;
            data.Add(1);
            if (n == 1)
            {
                return data;
            }
            long max = (long)Math.Sqrt(n);
            for (long i = 2; i <= max; i++)
                if (n % i == 0)
                {
                    data.Add(i);
                    data.Add(n / i);

                }
            data.Add(n);
            return data.OrderBy(s => s).Distinct().ToList();
        }
     //求两个整数的最小公倍数
    public static long GetMinGongBeiShu(long n1, long n2)
        {
            if (n1 < n2) //确定a>b
            {
                n1 = n1 + n2;
                n2 = n1 - n2;
                n1 = n1 - n2;
            }
            long product = n1 * n2;//求两个数的乘积
            while (n2 != 0)
            {
                n1 = n1 > n2 ? n1 : n2;//使n1中的数大于n2中的数
                long m = n1 % n2;
                n1 = n2;
                n2 = m;
            }
            return (product / n1);//最小公倍数
        }
        /// <summary>
        /// 求集合的的最小公倍数
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static long GetMinGongBeiShu( IList<long> data)
        {
            var t = data[0];
            for (int i = 1; i < data.Count; i++)
            {
                t = GetMinGongBeiShu(t, data[i]);
            }
            return t;
        }

通过以上几个方法就可以计算出来最小公倍数和最大公约数!

在线求多个自然数的最大公约数和最小公倍数 访问地址 公约数_最大公约数_最小公倍数_公约数在线计算查询_最小公倍数在线计算查询_最大公约数在线计算查询_多个整数公约数_多个整数最大公约数_多个整数最小公倍数_多个整数公约数在线计算查询_多个整数最小公倍数在线计算查询_多个整数最大公约数在线计算查询本页适合多个整数的自然数集合中求它们的公约数,最大公约数,最小公倍数,公约数在线计算查询,最小公倍数在线计算查询,最大公约数在线计算查询,多个整数公约数,多个整数最大公约数,多个整数最小公倍数,多个整数公约数在线计算查询,多个整数最小公倍数在线计算查询,多个整数最大公约数在线计算查询并且方便快捷准确,对多个整数求公约数,最小公倍数感兴趣的爱好者提供帮助。https://www.mz51.vip/YueShu/GongYueShu

https://www.mz51.vip/YueShu/GongYueShu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值