📜  打印所有前N个自然数的所有不同的偶数和奇数前缀按位XOR

📅  最后修改于: 2021-05-25 05:59:22             🧑  作者: Mango

给定正整数N ,任务是打印前N个自然数的前缀按位XOR的所有不同的偶数和奇数值。

例子:

方法:可以根据以下观察结果解决给定的问题:

  • 如果N模4的值为0 ,则前N个自然数的按位XOR值为N。
  • 如果N模4的值为1 ,则前N个自然数的按位XOR值为1
  • 如果N模4的值为2 ,则前N个自然数的按位XOR值为(N +1)
  • 如果N模4的值为3 ,则前N个自然数的按位XOR值为0

因此,根据上述原理,可以说作为偶数的按位XOR总是以0或4的倍数出现,而作为奇数的按位XOR总是比4的倍数少11

下面是上述方法的实现。

C++
// C++ program for the above approach
  
#include 
using namespace std;
  
// Print all distinct even & odd
// prefix Bitwise XORs from 1 to N
void evenOddBitwiseXOR(int N)
{
  
    cout << "Even: " << 0 << " ";
  
    // Print the even number
    for (int i = 4; i <= N; i = i + 4) {
        cout << i << " ";
    }
  
    cout << "\n";
  
    cout << "Odd: " << 1 << " ";
  
    // Print the odd number
    for (int i = 4; i <= N; i = i + 4) {
        cout << i - 1 << " ";
    }
  
    if (N % 4 == 2)
        cout << N + 1;
    else if (N % 4 == 3)
        cout << N;
}
  
// Driver Code
int main()
{
    int N = 6;
    evenOddBitwiseXOR(N);
  
    return 0;
}


输出:
Even: 0 4 
Odd: 1 3 7

时间复杂度: O(N)
辅助空间: O(1)