给定两个整数“ L”和“ R” ,我们需要编写一个程序,该程序查找二进制数表示为[L,R]的具有设置位素数的数目的计数。
例子:
Input : 6 10
Output : 4
6 -> 110 (2 set bits, 2 is prime)
7 -> 111 (3 set bits, 3 is prime)
9 -> 1001 (2 set bits , 2 is prime)
10->1010 (2 set bits , 2 is prime)
Input : 10 15
Output : 5
10 -> 1010(2 number of set bits)
11 -> 1011(3 number of set bits)
12 -> 1100(2 number of set bits)
13 -> 1101(3 number of set bits)
14 -> 1110(3 number of set bits)
15 -> 1111(4 number of set bits)
Hence total count is 5
对于[L,R]范围内的每个数字,我们计算设置的位数。使用Eratosthenes筛,我们生成一个素数数组,直到范围内的最后一个数字(即R)。如果设置的位数是质数,我们增加数字的数量并打印出来。
C++
// C++ code to find count of numbers
// having prime number of set bits
// in their binary representation in
// the range [L, R]
#include
using namespace std;
#include
// Function to create an array of prime
// numbers upto number 'n'
vector SieveOfEratosthenes(int n)
{
// Create a boolean array "prime[0..n]"
// and initialize all entries it as false.
// A value in prime[i] will finally be
// true if i is Not a prime, else false.
bool prime[n + 1];
memset(prime, false, sizeof(prime));
for(int p = 2; p * p <= n; p++)
{
// If prime[p] is not changed,
// then it is a prime
if (prime[p] == false)
// Update all multiples of p
for (int i = p * 2; i < n + 1; i += p)
prime[i] = true;
}
vector lis;
// Append all the prime numbers to the list
for (int p = 2; p <=n; p++)
if (prime[p] == false)
lis.push_back(p);
return lis;
}
// Utility function to count
// the number of set bits
int setBits(int n){
return __builtin_popcount (n);
}
// Driver code
int main ()
{
int x = 4, y = 8;
int count = 0;
// Here prime numbers are checked till the maximum
// number of bits possible because that the maximum
// bit sum possible is the number of bits itself.
vector primeArr = SieveOfEratosthenes(ceil(log2(y)));
for(int i = x; i < y + 1; i++)
{
int temp = setBits(i);
for(int j=0;j< primeArr.size();j++)
{if (temp == primeArr[j])
{count += 1;
break;
}
}
}
cout << count << endl;
return 0;
}
// This code is contributed by mits
Java
// Java code to find count of numbers having
// prime number of set bits in their binary
// representation in the range[L, R]
import java.util.*;
import java.lang.Math;
class GFG
{
// function to create an array of prime
// numbers upto number 'n'
static ArrayList SieveOfEratosthenes(int n)
{
// Create a boolean array "prime[0..n]" and initialize
// all entries it as false. A value in prime[i] will
// finally be true if i is Not a prime, else false.
boolean[] prime = new boolean[n + 1];
for(int p = 2; p * p <= n;p++)
{
// If prime[p] is not changed, then it is a prime
if (prime[p] == false)
// Update all multiples of p
for (int i = p * 2; i < n + 1; i += p)
prime[i] = true;
}
ArrayList lis = new ArrayList();
// append all the prime numbers to the list
for (int p = 2; p <=n; p++)
if (prime[p] == false)
lis.add(p);
return lis;
}
// utility function to count the number of set bits
static int setBits(int n)
{
return Integer.bitCount(n);
}
public static int log2(int x)
{
return (int) (Math.log(x) / Math.log(2) + 1e-10);
}
// Driver code
public static void main (String[] args)
{
int x = 4, y = 8;
int count = 0;
ArrayList primeArr = new ArrayList();
// Here prime numbers are checked till the maximum
// number of bits possible because that the maximum
// bit sum possible is the number of bits itself.
primeArr = SieveOfEratosthenes((int)Math.ceil(log2(y)));
for(int i = x; i < y + 1; i++)
{
int temp = setBits(i);
if(primeArr.contains(temp))
count += 1;
}
System.out.println(count);
}
}
// This code is contributed by mits.
Python
# Python code to find count of numbers having prime number
# of set bits in their binary representation in the range
# [L, R]
# Function to create an array of prime
# numbers upto number 'n'
import math as m
def SieveOfEratosthenes(n):
# Create a boolean array "prime[0..n]" and initialize
# all entries it as true. A value in prime[i] will
# finally be false if i is Not a prime, else true.
prime = [True for i in range(n+1)]
p = 2
while(p * p <= n):
# If prime[p] is not changed, then it is a prime
if (prime[p] == True):
# Update all multiples of p
for i in range(p * 2, n+1, p):
prime[i] = False
p += 1
lis = []
# Append all the prime numbers to the list
for p in range(2, n+1):
if prime[p]:
lis.append(p)
return lis
# Utility function to count the number of set bits
def setBits(n):
return bin(n)[2:].count('1')
# Driver program
if __name__ == "__main__":
x, y = [4, 8]
count = 0
# Here prime numbers are checked till the maximum
# number of bits possible because that the maximum
# bit sum possible is the number of bits itself.
primeArr = SieveOfEratosthenes(int(m.ceil(m.log(y,2))))
for i in range(x, y+1):
temp = setBits(i)
if temp in primeArr:
count += 1
print(count)
C#
// C# code to find count of numbers having prime number
// of set bits in their binary representation in the range
// [L, R]
using System;
using System.Linq;
using System.Collections;
class GFG{
// Function to create an array of prime
// numbers upto number 'n'
static ArrayList SieveOfEratosthenes(int n)
{
// Create a boolean array "prime[0..n]" and initialize
// all entries it as false. A value in prime[i] will
// finally be true if i is Not a prime, else false.
bool[] prime = new bool[n+1];
for(int p=2;p * p <= n;p++)
{
// If prime[p] is not changed, then it is a prime
if (prime[p] == false)
// Update all multiples of p
for (int i=p * 2;i c == '1');
}
// Driver program
public static void Main () {
int x=4, y=8;
int count = 0;
ArrayList primeArr=new ArrayList();
// Here prime numbers are checked till the maximum
// number of bits possible because that the maximum
// bit sum possible is the number of bits itself.
primeArr = SieveOfEratosthenes(Convert.ToInt32(Math.Ceiling(Math.Log(y,2.0))));
for(int i=x;i
PHP
>=1;};
return $cnt;
}
// Driver program
$x = 4;
$y = 8;
$count = 0;
// Here prime numbers are checked till the maximum
// number of bits possible because that the maximum
// bit sum possible is the number of bits itself.
$primeArr = SieveOfEratosthenes(ceil(log($y,2)));
for ($i=$x;$i<$y+1;$i++)
{
$temp = setBits($i);
if(in_array($temp, $primeArr))
$count += 1;
}
print($count);
// This code is contributed by mits
?>
输出:
3