二進位制表示中質數位數在 C++ 中


此問題中,我們給出了兩個整數 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

更新時間: 03-02-2020

187 次觀看

啟動你的 職業生涯

完成課程,獲得認證

立即開始
廣告