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;