Count of pairs in an Array whose sum is Prime
Given an array arr of size N elements, the task is to count the number of pairs of elements in the array whose sum is prime.
Examples:
Input: arr = {1, 2, 3, 4, 5}
Output: 5
Explanation: Pairs with sum as a prime number are: {1, 2}, {1, 4}, {2, 3}, {2, 5} and {3, 4}
Input: arr = {10, 20, 30, 40}
Output: 0
Explanation: No pair whose sum is a prime number exists.
Naive Approach:
Calculate the sum of every pair of elements in the array and check if that sum is a prime number or not.
Below code is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPrime( int num)
{
if (num == 0 || num == 1) {
return false ;
}
for ( int i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false ;
}
}
return true ;
}
int numPairsWithPrimeSum( int * arr, int n)
{
int count = 0;
for ( int i = 0; i < n; i++) {
for ( int j = i + 1; j < n; j++) {
int sum = arr[i] + arr[j];
if (isPrime(sum)) {
count++;
}
}
}
return count;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << numPairsWithPrimeSum(arr, n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
public static boolean isPrime( int num)
{
if (num == 0 || num == 1 ) {
return false ;
}
for ( int i = 2 ; i * i <= num; i++) {
if (num % i == 0 ) {
return false ;
}
}
return true ;
}
public static int numPairsWithPrimeSum(
int [] arr, int n)
{
int count = 0 ;
for ( int i = 0 ; i < n; i++) {
for ( int j = i + 1 ; j < n; j++) {
int sum = arr[i] + arr[j];
if (isPrime(sum)) {
count++;
}
}
}
return count;
}
public static void main(String[] args)
{
int [] arr = { 1 , 2 , 3 , 4 , 5 };
int n = arr.length;
System.out.println(
numPairsWithPrimeSum(arr, n));
}
}
|
Python3
import math
def isPrime(num):
sq = int (math.ceil(math.sqrt(num)))
if num = = 0 or num = = 1 :
return False
for i in range ( 2 , sq + 1 ):
if num % i = = 0 :
return False
return True
def numPairsWithPrimeSum(arr, n):
count = 0
for i in range (n):
for j in range (i + 1 , n):
sum = arr[i] + arr[j]
if isPrime( sum ):
count + = 1
return count
arr = [ 1 , 2 , 3 , 4 , 5 ]
n = len (arr)
print (numPairsWithPrimeSum(arr, n))
|
C#
using System;
class GFG{
public static bool isPrime( int num)
{
if (num == 0 || num == 1)
{
return false ;
}
for ( int i = 2; i * i <= num; i++)
{
if (num % i == 0)
{
return false ;
}
}
return true ;
}
public static int numPairsWithPrimeSum( int [] arr,
int n)
{
int count = 0;
for ( int i = 0; i < n; i++)
{
for ( int j = i + 1; j < n; j++)
{
int sum = arr[i] + arr[j];
if (isPrime(sum))
{
count++;
}
}
}
return count;
}
public static void Main()
{
int [] arr = { 1, 2, 3, 4, 5 };
int n = arr.Length;
Console.Write(numPairsWithPrimeSum(arr, n));
}
}
|
Javascript
<script>
function isPrime(num)
{
if (num == 0 || num == 1) {
return false ;
}
for (let i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false ;
}
}
return true ;
}
function numPairsWithPrimeSum(arr, n)
{
let count = 0;
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) {
let sum = arr[i] + arr[j];
if (isPrime(sum)) {
count++;
}
}
}
return count;
}
let arr = [ 1, 2, 3, 4, 5 ];
let n = arr.length;
document.write(numPairsWithPrimeSum(arr, n));
</script>
|
Time Complexity:
Efficient Approach:
Precompute and store the primes by using Sieve of Eratosthenes. Now, for every pair of elements, check whether their sum is prime or not.
Below code is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool * sieveOfEratosthenes( int N)
{
bool * isPrime = new bool [N + 1];
for ( int i = 0; i < N + 1; i++) {
isPrime[i] = true ;
}
isPrime[0] = false ;
isPrime[1] = false ;
for ( int i = 2; i * i <= N; i++) {
if (isPrime[i] == true ) {
int j = 2;
while (i * j <= N) {
isPrime[i * j] = false ;
j++;
}
}
}
return isPrime;
}
int numPairsWithPrimeSum( int * arr, int n)
{
int N = 2 * 1000000;
bool * isPrime = sieveOfEratosthenes(N);
int count = 0;
for ( int i = 0; i < n; i++) {
for ( int j = i + 1; j < n; j++) {
int sum = arr[i] + arr[j];
if (isPrime[sum]) {
count++;
}
}
}
return count;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << numPairsWithPrimeSum(arr, n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
public static boolean [] sieveOfEratosthenes( int N)
{
boolean [] isPrime = new boolean [N + 1 ];
for ( int i = 0 ; i < N + 1 ; i++) {
isPrime[i] = true ;
}
isPrime[ 0 ] = false ;
isPrime[ 1 ] = false ;
for ( int i = 2 ; i * i <= N; i++) {
if (isPrime[i] == true ) {
int j = 2 ;
while (i * j <= N) {
isPrime[i * j] = false ;
j++;
}
}
}
return isPrime;
}
public static int numPairsWithPrimeSum(
int [] arr, int n)
{
int N = 2 * 1000000 ;
boolean [] isPrime = sieveOfEratosthenes(N);
int count = 0 ;
for ( int i = 0 ; i < n; i++) {
for ( int j = i + 1 ; j < n; j++) {
int sum = arr[i] + arr[j];
if (isPrime[sum]) {
count++;
}
}
}
return count;
}
public static void main(String[] args)
{
int [] arr = { 1 , 2 , 3 , 4 , 5 };
int n = arr.length;
System.out.println(
numPairsWithPrimeSum(arr, n));
}
}
|
Python3
def sieveOfEratosthenes(N):
isPrime = [ True for i in range (N + 1 )]
isPrime[ 0 ] = False
isPrime[ 1 ] = False
i = 2
while ((i * i) < = N):
if (isPrime[i]):
j = 2
while (i * j < = N):
isPrime[i * j] = False
j + = 1
i + = 1
return isPrime
def numPairsWithPrimeSum(arr, n):
N = 2 * 1000000
isPrime = sieveOfEratosthenes(N)
count = 0
for i in range (n):
for j in range (i + 1 , n):
sum = arr[i] + arr[j]
if (isPrime[ sum ]):
count + = 1
return count
if __name__ = = "__main__" :
arr = [ 1 , 2 , 3 , 4 , 5 ]
n = len (arr)
print (numPairsWithPrimeSum(arr, n))
|
C#
using System;
class GFG{
public static bool [] sieveOfEratosthenes( int N)
{
bool [] isPrime = new bool [N + 1];
for ( int i = 0; i < N + 1; i++)
{
isPrime[i] = true ;
}
isPrime[0] = false ;
isPrime[1] = false ;
for ( int i = 2; i * i <= N; i++)
{
if (isPrime[i] == true )
{
int j = 2;
while (i * j <= N)
{
isPrime[i * j] = false ;
j++;
}
}
}
return isPrime;
}
public static int numPairsWithPrimeSum( int [] arr,
int n)
{
int N = 2 * 1000000;
bool [] isPrime = sieveOfEratosthenes(N);
int count = 0;
for ( int i = 0; i < n; i++)
{
for ( int j = i + 1; j < n; j++)
{
int sum = arr[i] + arr[j];
if (isPrime[sum])
{
count++;
}
}
}
return count;
}
public static void Main(String[] args)
{
int [] arr = { 1, 2, 3, 4, 5 };
int n = arr.Length;
Console.WriteLine(numPairsWithPrimeSum(arr, n));
}
}
|
Javascript
<script>
function sieveOfEratosthenes(N)
{
let isPrime = Array.from({length: N+1},
(_, i) => 0);
for (let i = 0; i < N + 1; i++) {
isPrime[i] = true ;
}
isPrime[0] = false ;
isPrime[1] = false ;
for (let i = 2; i * i <= N; i++) {
if (isPrime[i] == true ) {
let j = 2;
while (i * j <= N) {
isPrime[i * j] = false ;
j++;
}
}
}
return isPrime;
}
function numPairsWithPrimeSum(
arr, n)
{
let N = 2 * 1000000;
let isPrime = sieveOfEratosthenes(N);
let count = 0;
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) {
let sum = arr[i] + arr[j];
if (isPrime[sum]) {
count++;
}
}
}
return count;
}
let arr = [ 1, 2, 3, 4, 5 ];
let n = arr.length;
document.write(
numPairsWithPrimeSum(arr, n)
);
</script>
|
Time complexity: O(N^2)
Last Updated :
17 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...