📜  查找前N个质数的XOR

📅  最后修改于: 2021-05-06 18:48:52             🧑  作者: Mango

给定正整数N ,任务是找到前N个质数的XOR
例子:

方法:

  1. 创建Eratosthenes筛子以识别O(1)时间内数字是否为质数。
  2. 运行一个从1开始的循环,直到除非找到N个质数。
  3. 对所有质数进行异或运算,而忽略非质数。
  4. 最后,打印第一个N质数的XOR。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
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;
}


Java
// 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


Python3
# 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


C#
// 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


Javascript


输出:
3