XOR of all Prime numbers in an Array at positions divisible by K
Last Updated :
16 Nov, 2021
Given an array arr of integers of size N and an integer K, the task is to find the XOR of all the numbers which are prime and at a position divisible by K.
Examples:
Input: arr[] = {2, 3, 5, 7, 11, 8}, K = 2
Output: 4
Explanation:
Positions which are divisible by K are 2, 4, 6 and the elements are 3, 7, 8.
3 and 7 are primes among these.
Therefore XOR = 3 ^ 7 = 4
Input: arr[] = {1, 2, 3, 4, 5}, K = 3
Output: 3
Naive Approach: Traverse the array and for every position i which is divisible by k, check if it is prime or not. If it is a prime then compute the XOR of this number with the previous answer.
Efficient Approach: An efficient approach is to use Sieve Of Eratosthenes. Sieve array can be used to check a number is prime or not in O(1) time.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000005
void SieveOfEratosthenes(vector< bool >& prime)
{
prime[1] = false ;
prime[0] = false ;
for ( int p = 2; p * p < MAX; p++) {
if (prime[p] == true ) {
for ( int i = p * 2;
i < MAX; i += p)
prime[i] = false ;
}
}
}
void prime_xor( int arr[], int n, int k)
{
vector< bool > prime(MAX, true );
SieveOfEratosthenes(prime);
long long int ans = 0;
for ( int i = 0; i < n; i++) {
if (prime[arr[i]]) {
if ((i + 1) % k == 0) {
ans ^= arr[i];
}
}
}
cout << ans << endl;
}
int main()
{
int arr[] = { 2, 3, 5, 7, 11, 8 };
int n = sizeof (arr) / sizeof (arr[0]);
int K = 2;
prime_xor(arr, n, K);
return 0;
}
|
Java
class GFG {
static int MAX = 1000005 ;
static boolean prime[] = new boolean [MAX];
static void SieveOfEratosthenes( boolean []prime)
{
prime[ 1 ] = false ;
prime[ 0 ] = false ;
for ( int p = 2 ; p * p < MAX; p++) {
if (prime[p] == true ) {
for ( int i = p * 2 ;i < MAX; i += p)
prime[i] = false ;
}
}
}
static void prime_xor( int arr[], int n, int k)
{
for ( int i = 0 ; i < MAX; i++)
prime[i] = true ;
SieveOfEratosthenes(prime);
int ans = 0 ;
for ( int i = 0 ; i < n; i++) {
if (prime[arr[i]]) {
if ((i + 1 ) % k == 0 ) {
ans ^= arr[i];
}
}
}
System.out.println(ans);
}
public static void main (String[] args)
{
int arr[] = { 2 , 3 , 5 , 7 , 11 , 8 };
int n = arr.length;
int K = 2 ;
prime_xor(arr, n, K);
}
}
|
Python3
MAX = 1000005
def SieveOfEratosthenes(prime) :
prime[ 1 ] = False ;
prime[ 0 ] = False ;
for p in range ( 2 , int ( MAX * * ( 1 / 2 ))) :
if (prime[p] = = True ) :
for i in range (p * 2 , MAX , p) :
prime[i] = False ;
def prime_xor(arr, n, k) :
prime = [ True ] * MAX ;
SieveOfEratosthenes(prime);
ans = 0 ;
for i in range (n) :
if (prime[arr[i]]) :
if ((i + 1 ) % k = = 0 ) :
ans ^ = arr[i];
print (ans);
if __name__ = = "__main__" :
arr = [ 2 , 3 , 5 , 7 , 11 , 8 ];
n = len (arr);
K = 2 ;
prime_xor(arr, n, K);
|
C#
using System;
class GFG {
static int MAX = 1000005;
static bool []prime = new bool [MAX];
static void SieveOfEratosthenes( bool []prime)
{
prime[1] = false ;
prime[0] = false ;
for ( int p = 2; p * p < MAX; p++) {
if (prime[p] == true ) {
for ( int i = p * 2;i < MAX; i += p)
prime[i] = false ;
}
}
}
static void prime_xor( int []arr, int n, int k)
{
for ( int i = 0; i < MAX; i++)
prime[i] = true ;
SieveOfEratosthenes(prime);
int ans = 0;
for ( int i = 0; i < n; i++) {
if (prime[arr[i]]) {
if ((i + 1) % k == 0) {
ans ^= arr[i];
}
}
}
Console.WriteLine(ans);
}
public static void Main ( string [] args)
{
int []arr = { 2, 3, 5, 7, 11, 8 };
int n = arr.Length;
int K = 2;
prime_xor(arr, n, K);
}
}
|
Javascript
<script>
const MAX = 1000005;
function SieveOfEratosthenes(prime)
{
prime[1] = false ;
prime[0] = false ;
for (let p = 2; p * p < MAX; p++)
{
if (prime[p] == true )
{
for (let i = p * 2; i < MAX; i += p)
prime[i] = false ;
}
}
}
function prime_xor(arr, n, k)
{
let prime = new Array(MAX).fill( true );
SieveOfEratosthenes(prime);
let ans = 0;
for (let i = 0; i < n; i++)
{
if (prime[arr[i]])
{
if ((i + 1) % k == 0)
{
ans ^= arr[i];
}
}
}
document.write(ans);
}
let arr = [ 2, 3, 5, 7, 11, 8 ];
let n = arr.length;
let K = 2;
prime_xor(arr, n, K);
</script>
|
Time Complexity: O(N log (log N))
Auxiliary Space: O(?n)
Share your thoughts in the comments
Please Login to comment...