static void Main(string[] args) { Console.WriteLine("输入两个整数,求最大公约数"); int a, b; Stopwatch stopwatch = new Stopwatch(); while (true) { a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); stopwatch.Reset(); stopwatch.Start(); int res = getGYSByQJF(a, b); stopwatch.Stop(); Console.WriteLine(res + " 用时:" + stopwatch.ElapsedMilliseconds); } } //辗转相除法 static int getGYSByZZXCF(int a, int b) { if (a == 0 || b == 0) { return 1; } int bigNum = 0; int minNum = 0; if (a > b) { bigNum = a; minNum = b; } else { bigNum = b; minNum = a; } int yu = bigNum % minNum; if (yu == 0) { return minNum; } else { return getGYSByZZXCF(yu, minNum); } }
思路就是大数余小数得余,如果余不为0,那么余和小数的最大公约数就是大数和小数的最大公约数
计算99999999和88888888,时间为0ms
static void Main(string[] args) { Console.WriteLine("输入两个整数,求最大公约数"); int a, b; Stopwatch stopwatch = new Stopwatch(); while (true) { a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); stopwatch.Reset(); stopwatch.Start(); int res = getGYSByQJF(a, b); stopwatch.Stop(); Console.WriteLine(res + " 用时:" + stopwatch.ElapsedMilliseconds); } } //穷举法 static int getGYSByQJF(int a, int b) { int bigNum = 0; int minNum = 0; if (a > b) { bigNum = a; minNum = b; } else if (a < b) { bigNum = b; minNum = a; } else { return a; } int result = 1; //穷举从2开始到最小数的一半 for (int i = 2; i < minNum / 2; i++) { if (bigNum % i == 0 && minNum % i == 0) { result = i; } } return result; }
运行速度可以直接参考minNum,minNum越大,运行越大
计算99999999和88888888,用时:348ms