สมมติว่าเรามีอาร์เรย์ A[] โดยมีองค์ประกอบ n รายการ เราต้องหาอาร์เรย์ B[] อื่นซึ่งมีขนาดเป็น n+1 ดังนั้น GCD ของ B[i] และ B[i + 1] คือ A[i] หากมีหลายวิธีแก้ปัญหา ให้พิมพ์หนึ่งในนั้นที่มีผลรวมอาร์เรย์น้อยที่สุด ดังนั้นหาก A =[1, 2, 3] ผลลัพธ์จะเป็น [1, 2, 6, 3]
เมื่อ A มีองค์ประกอบเพียงตัวเดียวให้พูดว่า K แล้ว B =[K, K] ดังนั้น B[0] จะเป็น A[0] ตอนนี้ พิจารณาว่าเราทำได้ถึงดัชนี i ดังนั้นเราจึงได้ประมวลผลดัชนี i และคำนวณ B[i + 1] แล้ว ตอนนี้ GCD ของ B[i + 1] และ B[i + 2] =A[i + 1] จากนั้น GCD ของ B[i + 2] และ B[i + 3] =A[i + 2] ดังนั้น B[i + 2]>=LCM ของ A[i + 1], A[i + 2] เมื่อเราต้องการผลรวมขั้นต่ำ เราก็อยากได้ค่าต่ำสุดของ B[i + 2] ดังนั้น B[i + 2] – LCM ของ A[i + 2] และ A[i + 3]
ตัวอย่าง
#include <iostream> #include <algorithm> using namespace std; int getLCM(int a, int b) { return (a * b) / __gcd(a, b); } void gcdArray(int A[], int n) { cout << A[0] << " "; for (int i = 0; i < n - 1; i++) cout << getLCM(A[i], A[i + 1]) << " "; cout << A[n - 1]; } int main() { int A[] = { 1, 2, 3 }; int n = sizeof(A) / sizeof(A[0]); cout << "Constructed array: "; gcdArray(A, n); }
ผลลัพธ์
Constructed array: 1 2 6 3