Find the XOR of first N Prime Numbers

Given a positive integer N, the task is to find the XOR of the first N prime numbers.

Examples:

Input: N = 3
Output: 4
First 3 prime numbers are 2, 3 and 5.
And 2 ^ 3 ^ 5 = 4



Input: N = 5
Output: 8

Approach:

  1. Create Sieve of Eratosthenes to identify if a number is prime or not in O(1) time.
  2. Run a loop starting from 1 until and unless we find N prime numbers.
  3. XOR all the prime numbers and neglect those which are not prime.
  4. Finally, print the XOR of the 1st N prime numbers.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
#define MAX 10000
  
// 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.
bool prime[MAX + 1];
void SieveOfEratosthenes()
{
    memset(prime, true, sizeof(prime));
  
    prime[1] = false;
  
    for (int p = 2; p * p <= MAX; p++) {
  
        // If prime[p] is not changed, then it is a prime
        if (prime[p] == true) {
  
            // Set all multiples of p to non-prime
            for (int i = p * 2; i <= MAX; i += p)
                prime[i] = false;
        }
    }
}
  
// Function to return the xor of 1st N prime numbers
int xorFirstNPrime(int n)
{
    // Count of prime numbers
    int count = 0, num = 1;
  
    // XOR of prime numbers
    int xorVal = 0;
  
    while (count < n) {
  
        // If the number is prime xor it
        if (prime[num]) {
            xorVal ^= num;
  
            // Increment the count
            count++;
        }
  
        // Get to the next number
        num++;
    }
    return xorVal;
}
  
// Driver code
int main()
{
    // Create the sieve
    SieveOfEratosthenes();
  
    int n = 4;
  
    // Find the xor of 1st n prime numbers
    cout << xorFirstNPrime(n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach 
class GFG 
{
static final int MAX = 10000;
  
// 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. 
static boolean prime[] = new boolean [MAX + 1]; 
  
static void SieveOfEratosthenes() 
    int i ;
    for (i = 0; i < MAX + 1; i++)
    {
        prime[i] = true;
    }
  
    prime[1] = false
  
    for (int p = 2; p * p <= MAX; p++) 
    
  
        // If prime[p] is not changed, 
        // then it is a prime 
        if (prime[p] == true
        
  
            // Set all multiples of p to non-prime 
            for (i = p * 2; i <= MAX; i += p) 
                prime[i] = false
        
    
  
// Function to return the xor of 
// 1st N prime numbers 
static int xorFirstNPrime(int n) 
    // Count of prime numbers 
    int count = 0, num = 1
  
    // XOR of prime numbers 
    int xorVal = 0
  
    while (count < n)
    
  
        // If the number is prime xor it 
        if (prime[num]) 
        
            xorVal ^= num; 
  
            // Increment the count 
            count++; 
        
  
        // Get to the next number 
        num++; 
    
    return xorVal; 
  
// Driver code 
public static void main (String[] args) 
    // Create the sieve 
    SieveOfEratosthenes(); 
  
    int n = 4
  
    // Find the xor of 1st n prime numbers 
    System.out.println(xorFirstNPrime(n)); 
  
}
  
// This code is contributed by AnkitRai01

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
MAX = 10000
  
# 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(MAX + 1)]
  
def SieveOfEratosthenes():
  
    prime[1] = False
  
    for p in range(2, MAX + 1):
  
        # If prime[p] is not changed, 
        # then it is a prime
        if (prime[p] == True):
  
            # Set all multiples of p to non-prime
            for i in range(2 * p, MAX + 1, p):
                prime[i] = False
  
# Function to return the xor of 
# 1st N prime numbers
def xorFirstNPrime(n):
      
    # Count of prime numbers
    count = 0
    num = 1
  
    # XOR of prime numbers
    xorVal = 0
  
    while (count < n):
  
        # If the number is prime xor it
        if (prime[num]):
            xorVal ^= num
  
            # Increment the count
            count += 1
  
        # Get to the next number
        num += 1
  
    return xorVal
  
# Driver code
  
# Create the sieve
SieveOfEratosthenes()
  
n = 4
  
# Find the xor of 1st n prime numbers
print(xorFirstNPrime(n))
  
# This code is contributed by Mohit Kumar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach 
using System;
  
class GFG
{
      
static int MAX = 10000;
  
// 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. 
static bool []prime = new bool [MAX + 1]; 
  
static void SieveOfEratosthenes() 
    int i ;
    for (i = 0; i < MAX + 1; i++)
    {
        prime[i] = true;
    }
  
    prime[1] = false
  
    for (int p = 2; p * p <= MAX; p++) 
    
  
        // If prime[p] is not changed, 
        // then it is a prime 
        if (prime[p] == true
        
  
            // Set all multiples of p to non-prime 
            for (i = p * 2; i <= MAX; i += p) 
                prime[i] = false
        
    
  
// Function to return the xor of 
// 1st N prime numbers 
static int xorFirstNPrime(int n) 
    // Count of prime numbers 
    int count = 0, num = 1; 
  
    // XOR of prime numbers 
    int xorVal = 0; 
  
    while (count < n)
    
  
        // If the number is prime xor it 
        if (prime[num]) 
        
            xorVal ^= num; 
  
            // Increment the count 
            count++; 
        
  
        // Get to the next number 
        num++; 
    
    return xorVal; 
  
// Driver code 
static public void Main ()
{
      
    // Create the sieve 
    SieveOfEratosthenes(); 
    int n = 4; 
  
    // Find the xor of 1st n prime numbers 
    Console.Write(xorFirstNPrime(n)); 
}
  
// This code is contributed by Sachin

chevron_right


Output:

3


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.