C ++でgcd(A、B)がBになるように、ペア(A <=N、B <=N)の数を数えます
入力Nが与えられます。目標は、1 <=A<=Nおよび1<=B <=Nであり、GCD(A、B)がBであるようなA、Bのすべてのペアを見つけることです。 Bとしての最大公約数。
例を挙げて理解しましょう。
入力 − n =5
出力 − gcd(A、B)がBになるようにペア(A <=N、B <=N)の数を数える-10
説明
pairs (A <= N, B <= N) such that gcd (A , B) is B are − (1,1), (2,1),(3,1),(4,1),(5,1),(2,2),(3,3),(4,2),(4,4), (5,5). Total 10.
入力 − n =50
出力 − gcd(A、B)がBになるようなペア(A <=N、B <=N)の数を数える− 207
説明
pairs (A <= N, B <= N) such that gcd (A , B) is B are : (1,1), (2,1),(3,1),(4,1),(5,1).....(50,1) (2,2),(3,3),(4,4).....(50,50)
同様に、(4,2)、(6,3)、(8,2)、(8,4)、...........(50,25)のような他のペア。合計207
以下のプログラムで使用されているアプローチは次のとおりです
与えられた問題を解決するための複数のアプローチ、すなわちナイーブなアプローチと効率的なアプローチがあります。それでは、最初にナイーブなアプローチを見てみましょう。 。
-
入力として整数Nを取ります。
-
関数GCD(int A、int B)は、2つの整数を取り、AとBの最大公約数を返します。gcdを再帰的に計算します。
-
AまたはBのいずれかが0の場合、別のものを返します。両方が等しい場合は、2つの値のいずれかを返します。 A> Bの場合は(A-B、B)を返します。 Bが大きい場合は、gcd(B-A、A)を返します。最終的に、gcd値を取得します。
-
関数count_pairs(int N)はNを取り、pair(A、B)でBがgcdであり、両方がrange [1、N]にあるようなペアの数を返します。
-
そのようなペアの数のカウント=0として初期値を取ります。
-
ペアの値ごとに、forループi=1からi=N(Aの場合)を実行し、ネストされたforループj =1 t j =N(Bの場合)を実行します。
-
ペア(i、j)を作成し、GCD(i、j)に渡します。結果がjに等しい場合。インクリメントカウント。
-
両方のループの終わりに、結果としてカウントを返します。
効率的なアプローチ
ご覧のとおり、gcd(a、b)=bは、aが常にbの倍数であることを意味します。 N未満のb(1 <=b <=N)のそのような倍数はすべて、ペアになります。数iの場合、iの倍数がfloor(N / i)未満の場合、カウントされます。
-
関数count_pairs(int N)はNを取り、pair(A、B)でBがgcdであり、両方がrange [1、N]にあるようなペアの数を返します。
-
そのようなペアの数のカウント=0として初期値を取ります。
-
一時変数temp=Nおよびi=1を取ります。
-
while(i <=N)を使用してフォローする
-
それぞれについて、倍数の限界をj =N / temp
として計算します。 -
現在のiのペアの数はtemp*(i-j + 1)になります。カウントに追加します。
-
i =j+1に設定します。 (A、B)の次のBについて。
-
次の反復のためにtemp=N/iを設定します。
-
whileループの最後に、結果としてカウントを返します。
例(素朴なアプローチ)
#include <iostream> using namespace std; int GCD(int A, int B){ if (A == 0){ return B; } if (B == 0){ return A; } if (A == B){ return A; } if (A > B){ return GCD(A-B, B); } return GCD(A, B-A); } int count_pairs(int N){ int count = 0; for(int i=1; i<=N; i++){ for(int j = 1; j<=N; j++){ if(GCD(i, j)==j){ count++; } } } return count; } int main(){ int N = 4; cout<<"Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B are: "<<count_pairs(N); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B are: 8
例(効率的なアプローチ)
#include <bits/stdc++.h> using namespace std; int Count_pairs(int N){ int count = 0; int temp = N; int i = 1; while(i <= N){ int j = N / temp; count += temp * (j - i + 1); i = j + 1; temp = N / i; } return count; } int main(){ int N = 4; cout<<"Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B are: "<<Count_pairs(N); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count number of pairs (A <= N, B <= N) such that gcd (A , B) is B are: 8
-
C ++を使用して、XORが0になるような配列内のペアの数を見つけます。
n個の要素の配列があるとします。 XORが0になる配列内のペアの数を見つける必要があります。XORが0のペア(x、y)の場合、x=yです。これを解決するために、配列を並べ替えることができます。次に、2つの連続する要素が同じである場合は、カウントを増やします。すべての要素が同じである場合、最後のカウントはカウントされない場合があります。その場合、最後の要素と最初の要素が同じであるかどうかを確認し、同じである場合は、カウントを1つ増やします。 例 #include<iostream> #include<algorithm> using namespace std; in
-
C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します
配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) { bool pairAvilable = true;