C ++中所有可能的子阵列中可能的最小LCM和GCD
假设我们有一个大小为N的数组arr。它有N个正数。我们必须找到所有可能的子数组的最小元素。假设数组为{2,66,14,521},则最小LCM为2,GCD为1。
我们将使用贪婪的方法解决此问题。如果减少元素数量,则LCM会减少,而如果增加数组大小,则GCD会减少。我们需要从数组中找到最小的元素,它是单个元素,这是LCM所必需的。对于GCD,GCD将是数组所有元素的GCD。
示例
#include <iostream> #include <algorithm> using namespace std; int minimum_gcd(int arr[], int n) { int GCD = 0; for (int i = 0; i < n; i++) GCD = __gcd(GCD, arr[i]); return GCD; } int minimum_lcm(int arr[], int n) { int LCM = arr[0]; for (int i = 1; i < n; i++) LCM = min(LCM, arr[i]); return LCM; } int main() { int arr[] = { 2, 66, 14, 521 }; int n = sizeof(arr) / sizeof(arr[0]); cout << "LCM: " << minimum_lcm(arr, n) << ", GCD: " << minimum_gcd(arr, n); }
输出结果
LCM: 2, GCD: 1