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

C++で互いに素な配列を作成するための最小限の挿入


このセクションでは、別の興味深い問題が発生します。 N個の要素の配列があるとします。この配列を互いに素な配列にするためには、交点の最小数を見つける必要があります。互いに素な配列では、2つの連続する要素ごとのgcdは1です。配列も印刷する必要があります。

{5、10、20}のような要素があるとします。これは互いに素な配列ではありません。ここで、5、10、10、20の間に1を挿入すると、互いに素な配列になります。したがって、配列は{5、1、10、1、20}

のようになります。

アルゴリズム

makeCoPrime(arr, n):
begin
   count := 0
   for i in range 1 to n, do
      if gcd of arr[i] and arr[i – 1] is not 1, then increase count by 1
   done
   display count value
   display the first element of arr
   for i in range 1 to n, do
      if gcd of arr[i] and arr[i – 1] is not 1, then display 1
   display element arr[i]
   done
end
を表示します。

#include <iostream>
#include <algorithm>
using namespace std;
int makeCoPrime(int arr[], int n){
   int count = 0;
   for(int i = 1; i<n; i++){
      if(__gcd(arr[i], arr[i - 1]) != i){
         count++;
      }
   }
   cout << "Number of intersection points: " << count << endl;
   cout << arr[0] << " ";
   for(int i = 1; i<n; i++){
      if(__gcd(arr[i], arr[i - 1]) != i){
         cout << 1 << " ";
      }
      cout << arr[i] << " ";
   }
}
int main() {
   int A[] = {2, 7, 28};
   int n = sizeof(A)/sizeof(A[0]);
   makeCoPrime(A, n);
}

出力

Number of intersection points: 1
2 7 1 28

  1. 配列のGCDをC++でkの倍数にするための最小操作

    配列arrと別の値kがあるとします。配列のGCDをkの倍数に等しくするために、最小数の演算を見つける必要があります。この場合、操作は値を増減しています。配列が{4、5、6}のようで、kが5であるとします。4を1増やし、6を1減らすことができるので、5になります。ここでの演算数は2です。 結果を得るには、次の手順に従う必要があります- 手順 − 配列内のすべての要素eについて、手順2と3に従います kの場合、結果を(e mod k)と(k – e mod k)の最小値として増やします。 それ以外の場合、結果は結果+ k – eになります 結果を返す 例 #include <io

  2. C++で配列のすべての要素を同じにするための最小限の削除操作。

    問題の説明 要素が繰り返されるようなn個の要素の配列が与えられます。配列から任意の数の要素を削除できます。タスクは、配列から削除する要素の最小数を見つけて、配列を等しくすることです。 arr[] = {10, 8, 10, 7, 10, -1, -4, 12} すべての配列要素を同じにするには、強調表示された5つの要素を削除する必要があります。 アルゴリズム 1. Count frequency of each element 2. Find maximum frequecy among the frequencies. Let us call this as maxFrequncy 3.