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