给出两个正整数n和k。您必须计算从1到n的最多k个元素的最大可能XOR值。
注意: k> 1
例子 :
Input : n = 7, k = 3
Output : 7
Explanation : You can select 1, 2, 4 for maximum XOR-value
Input : n = 7, k = 2
Output : 7
Explanation : You can select 3 and 4 for maximum value.
对于k的任何值,我们可以从1到n中选择至少两个数字,并且对于所需的结果,我们必须仔细研究n的位表示形式。因此,让我们通过一个例子来理解它。假设n = 6且k = 2:
6 = 110的位表示
5的位表示= 101
位表示形式4 = 100
3 = 011的位表示
2 = 010的位表示
1 = 001的位表示
现在,您可以看到,在选择了所需的数目并选择了任意一个之后,您将无法获得大于111即7的XOR值。因此,对于给定的n和k> 1,最大可能的XOR值为2 log2(n )+1 -1 (n的所有位都变为1时的值)。
C++
// Program to obtain maximum XOR value sub-array
#include
using namespace std;
// function to calculate maximum XOR value
int maxXOR(int n, int k) {
int c = log2(n) + 1;
// Return (2^c - 1)
return ((1 << c) - 1);
}
// driver program
int main() {
int n = 12;
int k = 3;
cout << maxXOR(n, k);
return 0;
}
Java
// Program to obtain maximum
// XOR value sub-array
import java.lang.*;
class GFG
{
// function to calculate
// maximum XOR value
static int maxXOR(int n, int k)
{
int c = (int) (Math.log(n) /
Math.log(2)) + 1;
// Return (2^c - 1)
return ((1 << c) - 1);
}
// Driver Code
public static void main(String[] args)
{
int n = 12;
int k = 3;
System.out.println(maxXOR(n, k));
}
}
// This code is contributed by Smitha
Python3
# Python3 program to obtain maximum
# XOR value sub-array
import math
# Function to calculate maximum XOR value
def maxXOR(n, k):
c = int(math.log(n, 2)) + 1
# Return (2^c - 1)
return ((1 << c) - 1)
# Driver Code
n = 12; k = 3
print (maxXOR(n, k))
# This code is contributed by shreyanshi_arun.
C#
// Program to obtain maximum
// XOR value sub-array
using System;
class GFG
{
// function to calculate
// maximum XOR value
static int maxXOR(int n, int k)
{
int c = (int) (Math.Log(n) /
Math.Log(2)) + 1;
// Return (2^c - 1)
return ((1 << c) - 1);
}
// Driver Code
public static void Main(String[] args)
{
int n = 12;
int k = 3;
Console.Write(maxXOR(n, k)) ;
}
}
// This code is contributed by Smitha
PHP
Javascript
输出:
15