C++で(n XOR x)=(n – x)であるx<=nの値の数
入力として数値nが与えられます。目標は、条件(n xor x)=(nx)が成り立つような値xを見つけることです。また、xは範囲[0、n]にあります。
例を挙げて理解しましょう
入力 − n =10
出力 −(n XOR x)=(n – x)が− 4
であるx<=nの値の数説明 −10xまたはx=10-x − 0、2、8、および10のxの値。
入力 − n =15
出力 −(n XOR x)=(n – x)が-16であるx<=nの値の数
説明 − xの値(15 xor x =15-x − 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、および15)。
以下のプログラムで使用されているアプローチは次のとおりです
2つのアプローチを使用します。 forループを使用した最初の素朴なアプローチ。可能な限りxについて、i=0からi<=nまでトラバースを開始します。ここで、(n --i ==(n ^ i)// xor)かどうかを確認します。真のインクリメントカウントの場合。
-
整数変数nを入力として受け取ります。
-
関数unique_pair(int arr []、int size)は、配列とその長さを受け取り、ペア(arr [i]、arr [j])でインデックスi
となるような一意のペアの数を返します。 -
countの初期値を0とします。
-
整数のペアを含むセット「se」を取ります。 (set
> se) -
2つのforループを使用してarr[]のトラバースを開始します。 i=0からi
-
各ペアは常にi
を使用してペア(arr [i]、arr [j])を「se」に追加します。 -
両方のforループの最後で、count =se.size()を更新します。
-
Countには、「se」にいくつかのペアが含まれるようになりました。 (すべてが一意です。)
-
結果としてカウントを返します。
効率的なアプローチ
このアプローチでは、最初にnを同等のバイナリに変換します。私たちはそれを知っています
1 xor 0 =1-0
1 xor 1 =1-1
しかし
0xor0≠0-1
0xor1≠0-1
したがって、nのバイナリ表現の1ごとに、2つのケースがあります。 nのバイナリ表現のpの場合、条件を満たす2pの値があります。
インデックスi。次に、そのようなカウントを個別に追加して、一意のペアの総数を求めます。
-
整数変数nを入力として受け取ります。
-
関数unique_pair(int arr []、int size)は、配列とその長さを受け取り、ペア(arr [i]、arr [j])でインデックスi
となるような一意のペアの数を返します。 -
countの初期値を0とします。
-
number =bitset <8>(n).to_string();
を使用してnを文字列に変換します -
length =number.length()を取ります。
-
インデックスi=0からi
-
count =pow(2、count)をxの最終値として設定します。
-
結果としてカウントを返します。
例(素朴なアプローチ)
#include<bits/stdc++.h> using namespace std; int count_values(int n){ int count = 0; for (int i = 0; i <= n; i++){ if (n - i == (n ^ i)){ count++; } } return count; } int main(){ int n = 25; cout<<"Count of values of x <= n for which (n XOR x) = (n – x) are: "<<count_values(n); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of values of x <= n for which (n XOR x) = (n – x) are: 8
例(効率的なアプローチ)
#include<bits/stdc++.h> using namespace std; int count_values(int n){ int count = 0; string number = bitset<8>(n).to_string(); int length = number.length(); for (int i = 0; i < length; i++){ if (number.at(i) == '1') { count++; } } count = (int)pow(2, count); return count; } int main(){ int n = 25; cout<<"Count of values of x <= n for which (n XOR x) = (n – x) are: "<<count_values(n); return 0; }
出力
上記のコードを実行すると、次の出力が生成されます-
Count of values of x <= n for which (n XOR x) = (n – x) are: 8
-
C++で指定されたXORを持つすべてのペアをカウントします
このチュートリアルでは、指定されたXORのペアの数を見つけるプログラムについて説明します。 このために、配列と値が提供されます。私たちのタスクは、XORが指定された値に等しいペアの数を見つけることです。 例 #include<bits/stdc++.h> using namespace std; //returning the number of pairs //having XOR equal to given value int count_pair(int arr[], int n, int x){ int result = 0; &
-
2つの数の最大公約数のためのC++プログラム?
ここでは、2つの数の最大公約数を取得する方法を説明します。すべての公約数を見つけるわけではありませんが、そこにある公約数を数えます。 2つの数値が12と24のようである場合、最大公約数は1、2、3、4、6、12です。したがって、6つの公約数があるため、答えは6になります。 アルゴリズム countCommonDivisor(a、b) begin count := 0 gcd := gcd of a and b for i := 1 to square root of gcd, do &n