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

配列のGCDがC++で1になるように配列を変換します


このチュートリアルでは、配列のGCDが1になるように配列を変換するプログラムについて説明します。

このために、配列と正の整数kが提供されます。私たちのタスクは、要素のGCDが1になるように配列要素を変換する一方で、要素がk未満になるまで、配列要素をkで何回でも除算することです。

#include <bits/stdc++.h>
using namespace std;
//calculating the GCD of array
int calculate_gcd(int* arr, int n){
   int gcd = arr[0];
   for (int i = 1; i < n; i++)
      gcd = __gcd(arr[i], gcd);
   return gcd;
}
//checking if the operation is possible
bool convertGcd(int* arr, int n, int k){
   int gcd = calculate_gcd(arr, n);
   int max_prime = 1;
   for (int i = 2; i <= sqrt(gcd); i++) {
      while (gcd % i == 0) {
         gcd /= i;
         max_prime = max(max_prime, i);
      }
   }
   max_prime = max(max_prime, gcd);
   return (max_prime <= k);
}
int main(){
   int arr[] = { 10, 15, 30 };
   int k = 6;
   int n = sizeof(arr) / sizeof(arr[0]);
   if (convertGcd(arr, n, k) == true)
   cout << "Yes";
   else
      cout << "No";
   return 0;
}

出力

Yes

  1. C++でKの倍数の間に発生する配列の要素を並べ替えます

    配列Aと別の整数Kがあるとします。Kの任意の2つの倍数の間にある要素を並べ替える必要があります。Aが[2、13、3、1、21、7、8、13、12のようであるとします。 ]、およびK =2。出力は[2、1、3、7、13、21、8、13、12]になります。ここで、2の倍数は2、8、および12であり、2と8の間の要素は13、3、1、21、7であり、1、3、7、13、21、8から12の間の要素としてソートされます。はわずか13なので、すでに並べ替えられています。 配列をトラバースし、値Kの倍数を追跡する必要があります。次に、Kの2番目の倍数から始めて、現在と前のKの倍数の間ですべての要素を並べ替えま

  2. 合計がC++で均等になるように、配列に最小数を追加しますか?

    いくつかの番号を持つ配列があるとします。要素の合計を均等にするために、それに追加される数値の最小数を指定する必要があります。数値は0より大きくなければなりません。したがって、要素の合計が奇数の場合は1を加算しますが、合計がすでに偶数の場合は2を加算して偶数にします。 アルゴリズム addMinNumber(arr) begin    s := 0    for each element e from arr, do       s := e + s    done    if s i