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();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM