สมมติว่าเรามีอาร์เรย์ arr ขนาด N มีตัวเลขบวก N เราต้องหาองค์ประกอบขั้นต่ำของ subarray ที่เป็นไปได้ทั้งหมด สมมติว่าอาร์เรย์คือ {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