C ++のすべてのペアのgcd()から元の番号を検索します
コンセプト
別の配列の要素のすべての可能なペアのGCDを含む特定の配列array[]に関して、私たちのタスクは、GCD配列の計算に使用される元の数値を決定することです。
入力
array[] = {6, 1, 1, 13} 出力
13 6 gcd(13, 13) = 13 gcd(13, 6) = 1 gcd(6, 13) = 1 gcd(6, 6) = 6
入力
arr[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 8, 11, 13, 3, 3} 出力
13 11 8 6 6
メソッド
-
最初に、配列を降順で並べ替えます。
-
最大の要素は常に元の数字の1つになります。その番号を維持し、アレイから削除します。
-
前の手順で取得した要素のGCDを計算し、現在の要素を最大から開始して、指定された配列からGCD値を破棄します。
例
// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
// Shows utility function to print
// the contents of an array
void printArr(int array[], int n1){
for (int i = 0; i < n1; i++)
cout << array[i] << " ";
}
// Shows function to determine the required numbers
void findNumbers(int array[], int n1){
// Used to sort array in decreasing order
sort(array, array + n1, greater<int>());
int freq1[array[0] + 1] = { 0 };
// Here, count frequency of each element
for (int i = 0; i < n1; i++)
freq1[array[i]]++;
// Shows size of the resultant array
int size1 = sqrt(n1);
int brr1[size1] = { 0 }, x1, l1 = 0;
for (int i = 0; i < n1; i++) {
if (freq1[array[i]] > 0) {
// Here, store the highest element in
// the resultant array
brr1[l1] = array[i];
//Used to decrement the frequency of that element
freq1[brr1[l1]]--;
l1++;
for (int j = 0; j < l1; j++) {
if (i != j) {
// Calculate GCD
x1 = __gcd(array[i], brr1[j]);
// Decrement GCD value by 2
freq1[x1] -= 2;
}
}
}
}
printArr(brr1, size1);
}
// Driver code
int main(){
/* int array[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 6, 6, 6, 8, 11, 13, 3, 3}; */
int array[] = { 6, 1, 1, 13};
int n1 = sizeof(array) / sizeof(array[0]);
findNumbers(array, n1);
return 0;
} 出力
13 6
-
GCDを見つけるためのC++プログラム
2つの数値の最大公約数(GCD)は、両方を除算する最大の数値です。 例:45と27の2つの数字があるとします。 45 = 5 * 3 * 3 27 = 3 * 3 * 3 したがって、45と27のGCDは9です。 2つの数値のGCDを見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int
-
Pythonのすべてのペアのgcd()から元の番号を検索します
別の配列の要素の可能なすべてのペアのGCDが与えられている配列Aがあるとすると、与えられたGCD配列の計算に使用される元の数値を見つける必要があります。 したがって、入力がA =[6、1、1、13]の場合、gcd(13、13)は13、gcd(13、6)は1、gcd( 6、13)は1、gcd(6、6)は6 これを解決するには、次の手順に従います- n:=Aのサイズ 配列Aを降順で並べ替えます オカレンス:=サイズA[0]の配列で0で埋める 0からnの範囲のiの場合、実行 オカレンス[A[i]]:=オカレンス[A [i]] + 1 サイズ:=nの平方