Number of prime pairs in an array
Last Updated :
01 Sep, 2022
Given an array. The task is to count the possible pairs which can be formed using the elements of the array where both of the elements in the pair are prime.
Note: Pairs such as (a, b) and (b, a) should not be considered different.
Examples:
Input: arr[] = {1, 2, 3, 5, 7, 9}
Output: 6
From the given array, prime pairs are
(2, 3), (2, 5), (2, 7), (3, 5), (3, 7), (5, 7)
Input: arr[] = {1, 4, 5, 9, 11}
Output: 1
A naive approach is to count all possible pairs in the array and check if both the elements in the pair are prime.
An efficient approach is to count a number of primes in the array using Sieve of Eratosthenes. Let it be C. Now, total number of possible pairs is equal to C*(C-1)/2.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int pairCount( int arr[], int n)
{
int max_val = *max_element(arr, arr + n);
vector< bool > prime(max_val + 1, true );
prime[0] = false ;
prime[1] = false ;
for ( int p = 2; p * p <= max_val; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= max_val; i += p)
prime[i] = false ;
}
}
int count = 0;
for ( int i = 0; i < n; i++)
if (prime[arr[i]])
count++;
return (count * (count - 1)) / 2;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << pairCount(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG {
static int pairCount( int arr[], int n)
{
int max_val = Arrays.stream(arr).max().getAsInt();
Vector<Boolean> prime = new Vector<>(max_val + 1 );
for ( int i = 0 ; i < max_val + 1 ; i++) {
prime.add( true );
}
prime.add( 0 , Boolean.FALSE);
prime.add( 1 , Boolean.FALSE);
for ( int p = 2 ; p * p <= max_val; p++) {
if (prime.get(p) == true ) {
for ( int i = p * 2 ; i <= max_val; i += p) {
prime.add(i, Boolean.FALSE);
}
}
}
int count = 0 ;
for ( int i = 0 ; i < n; i++) {
if (prime.get(arr[i])) {
count++;
}
}
return (count * (count - 1 )) / 2 ;
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 };
int n = arr.length;
System.out.println(pairCount(arr, n));
}
}
|
Python3
from math import sqrt
def pairCount(arr, n):
max_val = arr[ 0 ]
for i in range ( len (arr)):
if (arr[i] > max_val):
max_val = arr[i]
prime = [ True for i in range (max_val + 1 )]
prime[ 0 ] = False
prime[ 1 ] = False
k = int (sqrt(max_val)) + 1
for p in range ( 2 , k, 1 ):
if (prime[p] = = True ):
for i in range (p * 2 , max_val + 1 , p):
prime[i] = False
count = 0
for i in range ( 0 , n, 1 ):
if (prime[arr[i]]):
count + = 1
return (count * (count - 1 )) / 2
if __name__ = = '__main__' :
arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
n = len (arr)
print ( int (pairCount(arr, n)))
|
C#
using System;
using System.Linq;
class GFG {
static int pairCount( int [] arr, int n)
{
int max_val = arr.Max();
bool [] prime = new bool [max_val + 1];
for ( int i = 0; i < max_val + 1; i++) {
prime[i] = true ;
}
prime[0] = false ;
prime[1] = false ;
for ( int p = 2; p * p <= max_val; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= max_val; i += p) {
prime[i] = false ;
}
}
}
int count = 0;
for ( int i = 0; i < n; i++) {
if (prime[arr[i]]) {
count++;
}
}
return (count * (count - 1)) / 2;
}
public static void Main()
{
int [] arr = { 1, 2, 3, 4, 5, 6, 7 };
int n = arr.Length;
Console.WriteLine(pairCount(arr, n));
}
}
|
PHP
<?php
function pairCount( $arr , $n )
{
$max_val = max( $arr );
$prime = array_fill (0, $max_val + 1, true);
$prime [0] = false;
$prime [1] = false;
for ( $p = 2; $p * $p <= $max_val ; $p ++)
{
if ( $prime [ $p ] == true)
{
for ( $i = $p * 2;
$i <= $max_val ; $i += $p )
$prime [ $i ] = false;
}
}
$count = 0;
for ( $i = 0; $i < $n ; $i ++)
if ( $prime [ $arr [ $i ]])
$count ++;
return ( $count * ( $count - 1)) / 2;
}
$arr = array (1, 2, 3, 4, 5, 6, 7 );
$n = sizeof( $arr );
echo pairCount( $arr , $n );
?>
|
Javascript
<script>
function pairCount(arr, n)
{
let max_val = 0;
for (let i = 0; i < n; i++)
{
max_val = Math.max(max_val, arr[i]);
}
let prime = new Array(max_val + 1);
for (let i = 0; i < max_val + 1; i++) {
prime[i] = true ;
}
prime[0] = false ;
prime[1] = false ;
for (let p = 2; p * p <= max_val; p++) {
if (prime[p] == true ) {
for (let i = p * 2; i <= max_val; i += p)
{
prime[i] = false ;
}
}
}
let count = 0;
for (let i = 0; i < n; i++) {
if (prime[arr[i]]) {
count++;
}
}
return (count * (count - 1)) / 2;
}
let arr = [ 1, 2, 3, 4, 5, 6, 7 ];
let n = arr.length;
document.write(pairCount(arr, n));
</script>
|
Share your thoughts in the comments
Please Login to comment...