Product of all prime numbers in an Array
Last Updated :
06 Sep, 2022
Given an array arr[] of N positive integers. The task is to write a program to find the product of all the prime numbers of the given array.
Examples:
Input: arr[] = {1, 3, 4, 5, 7}
Output: 105
There are three primes, 3, 5 and 7 whose product = 105.
Input: arr[] = {1, 2, 3, 4, 5, 6, 7}
Output: 210
Naive Approach: A simple solution is to traverse the array and keep checking for every element if it is prime or not and calculate the product of the prime element at the same time.
Efficient Approach: Generate all primes up to the maximum element of the array using the sieve of Eratosthenes and store them in a hash. Now traverse the array and find the product of those elements which are prime using the sieve.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int primeProduct( 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 prod = 1;
for ( int i = 0; i < n; i++)
if (prime[arr[i]])
prod *= arr[i];
return prod;
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << primeProduct(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int primeProduct( int arr[], int n)
{
int max_val = Arrays.stream(arr).max().getAsInt();
Vector<Boolean> prime = new Vector<Boolean>(max_val + 1 );
for ( int i = 0 ; i < max_val + 1 ; i++)
prime.add(i, Boolean.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 prod = 1 ;
for ( int i = 0 ; i < n; i++)
if (prime.get(arr[i]))
prod *= arr[i];
return prod;
}
public static void main(String[] args)
{
int arr[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 };
int n = arr.length;
System.out.print(primeProduct(arr, n));
}
}
|
Python3
import math as mt
def primeProduct(arr, n):
max_val = max (arr)
prime = [ True for i in range (max_val + 1 )]
prime[ 0 ] = False
prime[ 1 ] = False
for p in range (mt.ceil(mt.sqrt(max_val))):
if prime[p]:
for i in range (p * 2 , max_val + 1 , p):
prime[i] = False
prod = 1
for i in range (n):
if prime[arr[i]]:
prod * = arr[i]
return prod
arr = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 ]
n = len (arr)
print (primeProduct(arr, n))
|
C#
using System;
using System.Linq;
using System.Collections.Generic;
class GFG
{
static int primeProduct( int []arr, int n)
{
int max_val = arr.Max();
List< bool > prime = new List< bool >(max_val + 1);
for ( int i = 0; i < max_val + 1; i++)
prime.Insert(i, true );
prime.Insert(0, false );
prime.Insert(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.Insert(i, false );
}
}
int prod = 1;
for ( int i = 0; i < n; i++)
if (prime[arr[i]])
prod *= arr[i];
return prod;
}
public static void Main()
{
int []arr = { 1, 2, 3, 4, 5, 6, 7 };
int n = arr.Length;
Console.Write(primeProduct(arr, n));
}
}
|
PHP
<?php
function primeProduct( $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;
}
}
$prod = 1;
for ( $i = 0; $i < $n ; $i ++)
if ( $prime [ $arr [ $i ]])
$prod *= $arr [ $i ];
return $prod ;
}
$arr = array (1, 2, 3, 4, 5, 6, 7);
$n = sizeof( $arr );
echo (primeProduct( $arr , $n ));
?>
|
Javascript
<script>
function primeProduct(arr, n)
{
let max_val = arr.sort((a, b) => b - a)[0];
let prime = new Array(max_val + 1).fill( 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 prod = 1;
for (let i = 0; i < n; i++)
if (prime[arr[i]])
prod *= arr[i];
return prod;
}
let arr = new Array(1, 2, 3, 4, 5, 6, 7);
let n = arr.length;
document.write(primeProduct(arr, n));
</script>
|
Share your thoughts in the comments
Please Login to comment...