C#求最小公倍数与最大公约数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Main
{
    /*
    假设x和y的最大公约数是m,最小公倍数是n,则xy=mn
    分析:n=(x/m*y/m)*m=xy/m 
    1、公约数
        公约数,亦称“公因数”。它是一个能被若干个整数同时均整除的 整数。
        如果一个整数同时是几个整数的 约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数。
        求两个数最大公约数的方法
    倍数关系
        若较大数是较小数的 倍数,那么较小数就是这两个数的最大公约数。
    互质关系
        若这两个数是 互质数,那么它们的最大公约数就是1.
    2、公倍数
        公倍数(common multiple)指在两个或两个以上的自然数中,如果它们有相同的倍数,这些倍数就是它们的公倍数。
    公倍数举例
        A和B A/B=C 如果A能被B整除,则A为B和C的公倍数 
        两个数A和B,它们的公倍数就是既是A的倍数又是B的倍数的数,即能同时被A、B整除的数  
        比如说:12和15,它们的公倍数是60,120,180,等等  
        在这些公倍数中最小的那一个就叫最小公倍数,就是60。
    */
    class Program
    {
        public static bool IsEven(int number)
        {
            return number % 2 == 0;
        }
        public static int GetMax(int a, int b)
        {
            return a > b ? a : b;
        }
        public static int GetMin(int a, int b)
        {
            return a < b ? a : b;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("请输入两个正整数:");
            bool num1ok = int.TryParse(Console.ReadLine(), out int num1);
            bool num2ok = int.TryParse(Console.ReadLine(), out int num2);
            if (!(num1ok && num2ok))
            {
                Console.WriteLine("输入格式不正确!");
                return;
            }
            int a = num1, b = num2, max = 0, min = 0;
            if (a == b)
            {
                Console.WriteLine("最大公约数和最小公倍数都是:{0}", a);
                return;
            }

            max = GetMax(a, b);
            min = GetMin(a, b);
            /*while (IsEven(a) && IsEven(b))//更相减损术算法
            {
                a = a / 2;
                b = b / 2;
            }
            while (max - min != min)
            {
                a = min;
                b = max - min;
                max = GetMax(a, b);
                min = GetMin(a, b);
            }*/

            while (max % min != 0)//辗转相除算法
            {
                a = min;
                b = max % min;
                max = GetMax(a, b);
                min = GetMin(a, b);
            }
            Console.WriteLine("最大公约数是:{0},最小公倍数是:{1}", min, num1 * num2 / min);
            Console.ReadLine();
        }
    }
}

 

posted @ 2019-03-15 14:55  xiaobao5161  阅读(5113)  评论(0编辑  收藏  举报