📜  使用数组中的素数异或打印所有可能的对

📅  最后修改于: 2021-09-07 02:26:17             🧑  作者: Mango

给定一个由N 个正整数组成的数组arr[] 。任务是打印所有可能的对,使得它们的XOR是素数。
例子:

方法:

  1. 使用 Eratosthenes 筛法生成所有质数。
  2. 对于给定数组中的所有可能对,检查该对的XOR是否为素数。
  3. 如果一对的XOR是素数,则打印该对,否则检查下一对。

下面是上述方法的实现:

CPP
// C++ implementation of the above approach
#include 
using namespace std;
const int sz = 1e5;
bool isPrime[sz + 1];
 
// Function for Sieve of Eratosthenes
void generatePrime()
{
    int i, j;
    memset(isPrime, true, sizeof(isPrime));
 
    isPrime[0] = isPrime[1] = false;
 
    for (i = 2; i * i <= sz; i++) {
 
        // If i is prime, then make all
        // multiples of i false
        if (isPrime[i]) {
            for (j = i * i; j < sz; j += i) {
                isPrime[j] = false;
            }
        }
    }
}
 
// Function to print all Pairs whose
// XOR is prime
void Pair_of_PrimeXor(int A[], int n)
{
 
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
 
            // if A[i]^A[j] is prime,
            // then print this pair
            if (isPrime[(A[i] ^ A[j])]) {
 
                cout << "(" << A[i]
                     << ", " << A[j] << ") ";
            }
        }
    }
}
 
// Driver Code
int main()
{
    int A[] = { 1, 3, 6, 11 };
    int n = sizeof(A) / sizeof(A[0]);
 
    // Generate all the prime number
    generatePrime();
 
    // Function Call
    Pair_of_PrimeXor(A, n);
    return 0;
}


Java
// Java implementation of the above approach
class GFG
{
static int sz = (int) 1e5;
static boolean []isPrime = new boolean[sz + 1];
  
// Function for Sieve of Eratosthenes
static void generatePrime()
{
    int i, j;
    for (i = 2; i  <= sz; i++)
        isPrime[i] = true;
  
    for (i = 2; i * i <= sz; i++) {
  
        // If i is prime, then make all
        // multiples of i false
        if (isPrime[i]) {
            for (j = i * i; j < sz; j += i) {
                isPrime[j] = false;
            }
        }
    }
}
  
// Function to print all Pairs whose
// XOR is prime
static void Pair_of_PrimeXor(int A[], int n)
{
  
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
  
            // if A[i]^A[j] is prime,
            // then print this pair
            if (isPrime[(A[i] ^ A[j])]) {
  
                System.out.print("(" +  A[i]
                    + ", " +  A[j]+ ") ");
            }
        }
    }
}
  
// Driver Code
public static void main(String[] args)
{
    int A[] = { 1, 3, 6, 11 };
    int n = A.length;
  
    // Generate all the prime number
    generatePrime();
  
    // Function Call
    Pair_of_PrimeXor(A, n);
}
}
 
// This code is contributed by sapnasingh4991


Python
# Python implementation of the above approach
sz = 10**5
isPrime = [True]*(sz + 1)
 
# Function for Sieve of Eratosthenes
def generatePrime():
    i, j = 0, 0
    isPrime[0] = isPrime[1] = False
 
    for i in range(2, sz + 1):
        if i * i > sz:
            break
 
        # If i is prime, then make all
        # multiples of i false
        if (isPrime[i]):
            for j in range(i*i, sz, i):
                isPrime[j] = False
 
# Function to prall Pairs whose
# XOR is prime
def Pair_of_PrimeXor(A, n):
 
    for i in range(n):
        for j in range(i + 1, n):
 
            # if A[i]^A[j] is prime,
            # then prthis pair
            if (isPrime[(A[i] ^ A[j])]):
 
                print("(",A[i],",",A[j],")",end=" ")
 
# Driver Code
if __name__ == '__main__':
    A = [1, 3, 6, 11]
    n =len(A)
 
    # Generate all the prime number
    generatePrime()
 
    # Function Call
    Pair_of_PrimeXor(A, n)
 
# This code is contributed by mohit kumar 29


C#
// C# implementation of the above approach
using System;
 
class GFG
{
static int sz = (int) 1e5;
static bool []isPrime = new bool[sz + 1];
   
// Function for Sieve of Eratosthenes
static void generatePrime()
{
    int i, j;
    for (i = 2; i  <= sz; i++)
        isPrime[i] = true;
   
    for (i = 2; i * i <= sz; i++) {
   
        // If i is prime, then make all
        // multiples of i false
        if (isPrime[i]) {
            for (j = i * i; j < sz; j += i) {
                isPrime[j] = false;
            }
        }
    }
}
   
// Function to print all Pairs whose
// XOR is prime
static void Pair_of_PrimeXor(int []A, int n)
{
   
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
   
            // if A[i]^A[j] is prime,
            // then print this pair
            if (isPrime[(A[i] ^ A[j])]) {
   
                Console.Write("(" +  A[i]
                    + ", " +  A[j]+ ") ");
            }
        }
    }
}
   
// Driver Code
public static void Main(String[] args)
{
    int []A = { 1, 3, 6, 11 };
    int n = A.Length;
   
    // Generate all the prime number
    generatePrime();
   
    // Function Call
    Pair_of_PrimeXor(A, n);
}
}
 
// This code is contributed by Rajput-Ji


Javascript


输出:
(1, 3) (1, 6) (3, 6) (6, 11)

时间复杂度: O(N 2 ),其中 N 是给定数组的长度。

如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live