Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 주어진 배열의 연속 요소의 GCD에서 배열을 구성합니다.

<시간/>

n개의 요소가 있는 배열 A[]가 있다고 가정합니다. B[i]와 B[i + 1]의 GCD가 A[i]가 되도록 크기가 n+1인 다른 배열 B[]를 찾아야 합니다. 여러 솔루션이 있는 경우 배열 합이 최소인 솔루션 중 하나를 인쇄하십시오. 따라서 A =[1, 2, 3]이면 출력은 [1, 2, 6, 3]

이 됩니다.

A에 K라는 요소가 하나만 있으면 B =[K, K]입니다. 따라서 B[0]은 A[0]이 됩니다. 이제 인덱스 i까지 완료했다고 가정하고 인덱스 i를 이미 처리하고 B[i + 1]을 계산했습니다. 이제 B[i + 1] 및 B[i + 2] =A[i + 1]의 GCD, B[i + 2] 및 B[i + 3]의 GCD =A[i + 2]. 따라서 B[i + 2]>=A[i + 1], A[i + 2]의 LCM입니다. 최소 합을 원하므로 B[i + 2]의 최소값을 원하므로 B[i + 2] – A[i + 2] 및 A[i + 3]의 LCM

예시

#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