C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++の積に等しいLCMの最大長サブアレイ


配列Aがあるとします。サブ配列の最大長を見つける必要があります。そのLCMは、そのサブ配列の要素の積と同じです。そのようなサブ配列が見つからない場合は、-1を返します。配列が{6、10、21}で、長さが2であるとすると、サブ配列{10、21}があり、そのLCMは210で、積も210です。

アプローチは簡単です。 2以上の長さの可能なすべてのサブ配列をチェックする必要があります。サブ配列が条件を満たす場合は、回答を最大の回答とサブ配列の長さとして更新します。

#include <iostream>
using namespace std;
int gcd(int a, int b) {
   if (b == 0)
      return a;
   return gcd(b, a % b);
}
int maxLengthLCMSubarray(int arr[], int n) {
   int len = -1;
   for (int i = 0; i < n - 1; i++) {
      for (int j = i + 1; j < n; j++) {
         long long lcm = 1LL * arr[i];
         long long product = 1LL * arr[i];
         for (int k = i + 1; k <= j; k++) {
            lcm = (((arr[k] * lcm)) / (gcd(arr[k], lcm)));
            product = product * arr[k];
         }
         if (lcm == product) {
            len = max(len, j - i + 1);
         }
      }
   }
   return len;
}
int main() {
   int arr[] = {8, 2, 6, 10, 13, 21, 7};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum Length: " << maxLengthLCMSubarray(arr, n);
}

出力

Maximum Length: 3

  1. C++で最大の積と合計がNに等しいNの4つの要素を見つけます

    整数Nがあるとします。タスクは、Nのすべての因子を見つけ、-のようにNの4つの因子の積を表示することです。 それらの4つの要素の合計はNに等しい 4つの要素の積が最大です 数が24であるとすると、積は1296になります。すべての因子が1、2、3、4、6、8、12、24であることがわかっているので、因子6を4回選択する必要があります。したがって、6 + 6 + 6 + 6 =24です。ここでは、積が最大になります。 これを解決するには、1からNまでのすべての要素を見つけてから、これらの条件を確認する必要があります Nが素数の場合、答えは偽になります 与えられたnが

  2. C++でのペアの最大長チェーン

    ペアのチェーンが与えられています。各ペアには2つの整数があり、最初の整数は常に小さく、2番目の整数は大きいので、同じルールをチェーンの構築にも適用できます。ペア(x、y)は、q