Product of all the Composite Numbers in an array
Given an array of integers. The task is to calculate the product of all the composite numbers in an array.
Note: 1 is neither prime nor composite.
Examples:
Input: arr[] = {2, 3, 4, 5, 6, 7}
Output: 24
Composite numbers are 4 and 6.
So, product = 24
Input: arr[] = {11, 13, 17, 20, 19}
Output: 20
Naive Approach: A simple solution is to traverse the array and do a primality test on every element. If the element is not prime nor 1, multiply it to the running product.
Time Complexity: O(Nsqrt(N))
Efficient Approach: Using Sieve of Eratosthenes generate a boolean vector upto the size of the maximum element from the array which can be used to check whether a number is prime or not. Also add 0 and 1 as a prime so that they don’t get counted as composite numbers. Now traverse the array and find the product of those elements which are composite using the generated boolean vector.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
int compositeProduct( int arr[], int n)
{
int max_val = *max_element(arr, arr + n);
vector< bool > prime(max_val + 1, true );
prime[0] = true ;
prime[1] = true ;
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 product = 1;
for ( int i = 0; i < n; i++)
if (!prime[arr[i]]) {
product *= arr[i];
}
return product;
}
int main()
{
int arr[] = { 2, 3, 4, 5, 6, 7 };
int n = sizeof (arr) / sizeof (arr[0]);
cout << compositeProduct(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG {
static int compositeProduct( int arr[], int n)
{
int max_val = Arrays.stream(arr).max().getAsInt();
boolean [] prime = new boolean [max_val + 1 ];
Arrays.fill(prime, true );
prime[ 0 ] = true ;
prime[ 1 ] = true ;
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 product = 1 ;
for ( int i = 0 ; i < n; i++) {
if (!prime[arr[i]]) {
product *= arr[i];
}
}
return product;
}
public static void main(String[] args)
{
int arr[] = { 2 , 3 , 4 , 5 , 6 , 7 };
int n = arr.length;
System.out.println(compositeProduct(arr, n));
}
}
|
Python3
import math as mt
def compositeProduct(arr, n):
max_val = max (arr)
prime = [ True for i in range (max_val + 1 )]
prime[ 0 ] = True
prime[ 1 ] = True
for p in range ( 2 , mt.ceil(mt.sqrt(max_val))):
if prime[p]:
for i in range (p * 2 , max_val + 1 , p):
prime[i] = False
product = 1
for i in range (n):
if prime[arr[i]] = = False :
product * = arr[i]
return product
arr = [ 2 , 3 , 4 , 5 , 6 , 7 ]
n = len (arr)
print (compositeProduct(arr, n))
|
C#
using System;
using System.Linq;
public class GFG {
static int compositeProduct( 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] = true ;
prime[1] = true ;
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 product = 1;
for ( int i = 0; i < n; i++) {
if (!prime[arr[i]]) {
product *= arr[i];
}
}
return product;
}
public static void Main()
{
int [] arr = { 2, 3, 4, 5, 6, 7 };
int n = arr.Length;
Console.WriteLine(compositeProduct(arr, n));
}
}
|
PHP
<?php
function compositeProduct( $arr , $n )
{
$max_val = max( $arr );
$prime = array_fill (0, $max_val + 1, true);
$prime [0] = true;
$prime [1] = true;
for ( $p = 2; $p * $p <= $max_val ; $p ++)
{
if ( $prime [ $p ] == true)
{
for ( $i = $p * 2;
$i <= $max_val ; $i += $p )
$prime [ $i ] = false;
}
}
$product = 1;
for ( $i = 0; $i < $n ; $i ++)
if (! $prime [ $arr [ $i ]])
{
$product *= $arr [ $i ];
}
return $product ;
}
$arr = array ( 2, 3, 4, 5, 6, 7 );
$n = count ( $arr );
echo compositeProduct( $arr , $n );
?>
|
Javascript
<script>
function compositeProduct(arr, n)
{
let max_val = arr.sort((A, B) => B - A)[0];
let prime = new Array(max_val + 1).fill( true );
prime[0] = true ;
prime[1] = true ;
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 product = 1;
for (let i = 0; i < n; i++)
if (!prime[arr[i]])
{
product *= arr[i];
}
return product;
}
let arr = new Array( 2, 3, 4, 5, 6, 7 );
let n = arr.length;
document.write(compositeProduct(arr, n));
</script>
|
Complexity Analysis:
- Time Complexity: O(n + max_val2)
- Auxiliary Space: O(max_val)
Last Updated :
12 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...