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