在C ++中使数组的GCD成为k的倍数的最小操作

假设我们有一个数组arr和另一个值k。我们必须找到最小数量的运算,以使数组的GCD等于k的倍数。在这种情况下,操作将增大或减小该值。假设数组类似于{4,5,6},并且k为5。我们可以将4加1,然后将6减1,因此它变为5。这里的操作数为2。

我们必须按照以下步骤来获得结果-

步骤-

  • 对于数组中的所有元素e,请遵循步骤2和3

  • 如果e不为1,并且e> k,则将结果增加为(e mod k)和(k – e mod k)的最小值。

  • 否则,结果将是结果+ k – e

  • 返回结果

示例

#include <iostream>
using namespace std;
int countMinOp(int arr[], int n, int k) {
   int result = 0;
   for (int i = 0; i < n; ++i) {
      if (arr[i] != 1 && arr[i] > k) {
         result = result + min(arr[i] % k, k - arr[i] % k);
      } else {
         result = result + k - arr[i];
      }
   }
   return result;
}
int main() {
   int arr[] = { 4, 5, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 5;
   cout << "Minimum operation required: " << countMinOp(arr, n, k);
}

输出结果

Minimum operation required: 2