C++递归高精度算法求最小公倍数 - Dq8e8
///'题目要求求n个正整数的最小公倍数。我们可以使用递归和高精度算法来解决这个问题。//n//n首先,我们可以定义一个函数gcd来求两个数的最大公约数。gcd的递归定义为:gcd(a, b) = gcd(b, a%b),当a%b=0时,gcd(a, b) = b。可以使用欧几里得算法来实现gcd函数。//n//n接下来,我们可以定义一个函数lcm来求两个数的最小公倍数。lcm的定义为:lcm(a, b) = a * b / gcd(a, b)。可以使用这个公式来实现lcm函数。//n//n最后,我们可以使用循环来依次求n个数的最小公倍数。假设当前已经求得前i个数的最小公倍数为result,那么我们可以用lcm(result, 第i+1个数)来更新result。最终的result即为n个数的最小公倍数。//n//n以下是C++代码实现://n//ncpp//n#include <iostream>//nusing namespace std;//n//n// 求两个数的最大公约数//nlong long gcd(long long a, long long b) {//n if (b == 0) {//n return a;//n }//n return gcd(b, a % b);//n}//n//n// 求两个数的最小公倍数//nlong long lcm(long long a, long long b) {//n return a * b / gcd(a, b);//n}//n//nint main() {//n int n;//n cin >> n;//n long long result;//n cin >> result;//n for (int i = 1; i < n; i++) {//n long long num;//n cin >> num;//n result = lcm(result, num);//n }//n cout << result << endl;//n return 0;//n}//n//n//n复杂度分析://n对于每个数,gcd函数的时间复杂度为O(log(a+b)),lcm函数的时间复杂度为O(log(ab))。因此,整个算法的时间复杂度为O(nlog(a*b))。其中n为给定数的个数,a和b为给定数中的最大值。由于题目中给定的数不超过1000000000000,所以算法的时间复杂度是可接受的。//n//n///
原文地址: https://www.cveoy.top/t/topic/pOQU 著作权归作者所有。请勿转载和采集!