给定两个整数N和M ,任务是使用递归找到它们的LCM。
例子:
Input: N = 2, M = 4
Output: 4
Explanation: LCM of 2, 4 is 4.
Input: N = 3, M = 5
Output: 15
Explanation: LCM of 3, 5 is 15.
方法:想法是使用找到两个数字的LCM的基本基本方法。请按照以下步骤解决问题:
- 用3个整数参数N,M和K定义一个递归函数LCM()来找到N和M的LCM。
- 需要考虑以下基本条件:
- 如果N或M等于1 ,则返回N * M。
- 如果N等于M ,则返回N。
- 如果K
- 如果K除以N和M ,则返回K * LCM(N / K,M / K,2) 。
- 否则,将K递增1并返回LCM(N,M,K + 1)。
- 否则,返回N和M的乘积。
- 最后,将递归函数的结果打印为所需的LCM。
下面是上述方法的实现:
C
// C program for the above approach #include
// Function to return the // minimum of two numbers int Min(int Num1, int Num2) { return Num1 >= Num2 ? Num2 : Num1; } // Utility function to calculate LCM // of two numbers using recursion int LCMUtil(int Num1, int Num2, int K) { // If either of the two numbers // is 1, return their product if (Num1 == 1 || Num2 == 1) return Num1 * Num2; // If both the numbers are equal if (Num1 == Num2) return Num1; // If K is smaller than the // minimum of the two numbers if (K <= Min(Num1, Num2)) { // Checks if both numbers are // divisible by K or not if (Num1 % K == 0 && Num2 % K == 0) { // Recursively call LCM() function return K * LCMUtil( Num1 / K, Num2 / K, 2); } // Otherwise else return LCMUtil(Num1, Num2, K + 1); } // If K exceeds minimum else return Num1 * Num2; } // Function to calculate LCM // of two numbers void LCM(int N, int M) { // Stores LCM of two number int lcm = LCMUtil(N, M, 2); // Print LCM printf("%d", lcm); } // Driver Code int main() { // Given N & M int N = 2, M = 4; // Function Call LCM(N, M); return 0; }
输出:4
时间复杂度: O(max(N,M))
辅助空间: O(1)