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

C++でのバイナリ表現のセットビットの素数


この問題では、2つの整数LとRが与えられます。ビットカウントをLからRの間にある素数に設定した合計数を出力するタスク。

問題を理解するために例を見てみましょう

Input: L = 7, R = 12
Output: 6
Explanation:
7 -> 111 , set bits = 2, prime number.
8 -> 1000 , set bits = 1, not prime number.
9 -> 1001 , set bits = 2, prime number
10 -> 1010 , set bits = 2, prime number
11 -> 1011, set bits = 3, prime number
12 -> 1100, set bits = 2, prime number

この問題を解決するために、範囲内のすべての要素をトラバースします。そして、その数のセットビットの総数を確認します。これには、CPP _builtin_popcount()で事前定義された関数を使用します。次に、プライムの数値のセットビットをチェックします。はいの場合はカウントを増やし、そうでない場合はカウントを増やしません。

ソリューションの実装を示すプログラム

#include <iostream>
using namespace std;
bool isPrimeNumber(int n) {
   if (n <= 1) return false;
   if (n <= 3) return true;
   if (n%2 == 0 || n%3 == 0) return false;
   for (int i=5; i*i<=n; i=i+6)
   if (n%i == 0 || n%(i+2) == 0)
   return false;
   return true;
}
void printPrimeSetBits(int l, int r) {
   int tot_bit, count = 0;
   for (int i = l; i <= r; i++) {
      tot_bit = __builtin_popcount(i);
      if (isPrimeNumber(tot_bit))
         count++;
   }
   cout<<count;
}
int main() {
   int L = 7, R = 13;
   cout<<"Total numbers with prime set bits between "<<L<<" and "<<R<<" are : ";
   printPrimeSetBits(L, R);
   return 0;
}

出力

Total numbers with prime set bits between 7 and 13 are : 6

  1. C++プログラミングのバイナリツリーの各ノードのセットビット数を出力します。

    バイナリツリーが与えられると、関数はノードに格納されているキーのバイナリ値を生成し、そのバイナリに相当するビット数(1)を返します。 例 次のようなキーを持つ二分木:10 3 211 140162100および146 キー 同等のバイナリ ビット(出力)を設定 10 1010 2 3 0011 2 211 11010011 5 140 10001100 3 162 10100010 3 100 1100100 3 146 10010010 3 ここでは、関数_

  2. Pythonのバイナリ表現のセットビットの素数

    2つの整数LとRがあるとすると、[L、R](両端を含む)の範囲内で、バイナリ形式のセットビットの素数を持つ数値の数を見つける必要があります。 したがって、入力がL=6およびR=10の場合、出力は4になります。これは、4つの数値6(110)、7(111)、9(1001)、10(1010)があり、すべて素数を持っているためです。セットビット数。 これを解決するには、次の手順に従います- count:=0 LからRの範囲のjについては、次のようにします jの設定ビット数が[2,3,5,7,11,13,17,19]にある場合、 count:=count + 1 返品数 理解を