二进制表示中质数位数在 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
广告