给定一个由N 个正整数组成的数组arr[] 。任务是打印所有可能的对,使得它们的XOR是素数。
例子:
Input: arr[] = {1, 3, 6, 11}
Output: (1, 3) (1, 6) (3, 6) (6, 11)
Explanation:
The XOR of the above pairs:
1^3 = 2
1^6 = 7
3^6 = 5
6^11 = 13
Input: arr[] = { 22, 58, 63, 0, 47 }
Output: (22, 63) (58, 63) (0, 47)
Explanation:
The XOR of the above pairs:
22^33 = 37
58^63 = 5
0^47 = 47
方法:
- 使用 Eratosthenes 筛法生成所有质数。
- 对于给定数组中的所有可能对,检查该对的XOR是否为素数。
- 如果一对的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