Insert minimum number in array so that sum of array becomes prime
Last Updated :
18 Jan, 2024
Given an array of n integers. Find minimum number to be inserted in array, so that sum of all elements of array becomes prime. If sum is already prime, then return 0.
Examples :
Input : arr[] = { 2, 4, 6, 8, 12 }
Output : 5
Input : arr[] = { 3, 5, 7 }
Output : 0
Naive approach: The simplest approach to solve this problem is to first find the sum of array elements. Then check if this sum is prime or not, if sum is prime return zero otherwise find prime number just greater than this sum. We can find prime number greater than sum by checking if a number is prime or not from (sum+1) until we find a prime number. Once a prime number just greater than sum is found, return difference of sum and this prime number.
Below is implementation of above idea:
C++
// C++ program to find minimum number to
// insert in array so their sum is prime
#include <bits/stdc++.h>
using namespace std;
// function to check if a
// number is prime or not
bool isPrime(int n)
{
// Corner case
if (n <= 1)
return false;
// Check from 2 to n - 1
for (int i = 2; i < n; i++)
if (n % i == 0)
return false;
return true;
}
// Find prime number
// greater than a number
int findPrime(int n)
{
int num = n + 1;
// find prime greater than n
while (num)
{
// check if num is prime
if (isPrime(num))
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
int minNumber(int arr[], int n)
{
int sum = 0;
// To find sum of array elements
for (int i = 0; i < n; i++)
sum += arr[i];
// if sum is already prime
// return 0
if (isPrime(sum))
return 0;
// To find prime number
// greater than sum
int num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// Driver code
int main()
{
int arr[] = { 2, 4, 6, 8, 12 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << minNumber(arr, n);
return 0;
}
Java
// Java program to find minimum number to
// insert in array so their sum is prime
class GFG
{
// function to check if a
// number is prime or not
static boolean isPrime(int n)
{
// Corner case
if (n <= 1)
return false;
// Check from 2 to n - 1
for (int i = 2; i < n; i++)
if (n % i == 0)
return false;
return true;
}
// Find prime number
// greater than a number
static int findPrime(int n)
{
int num = n + 1;
// find prime greater than n
while (num > 0)
{
// check if num is prime
if (isPrime(num))
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
static int minNumber(int arr[], int n)
{
int sum = 0;
// To find sum of array elements
for (int i = 0; i < n; i++)
sum += arr[i];
// if sum is already prime
// return 0
if (isPrime(sum))
return 0;
// To find prime number
// greater than sum
int num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// Driver Code
public static void main(String[]args)
{
int arr[] = { 2, 4, 6, 8, 12 };
int n = arr.length;
System.out.println(minNumber(arr, n));
}
}
// This code is contributed by Azkia Anam.
Python3
# Python3 program to find minimum number to
# insert in array so their sum is prime
# function to check if a
# number is prime or not
def isPrime(n):
# Corner case
if n <= 1:
return False
# Check from 2 to n - 1
for i in range(2, n):
if n % i == 0:
return False
return True
# Find prime number
# greater than a number
def findPrime(n):
num = n + 1
# find prime greater than n
while (num):
# check if num is prime
if isPrime(num):
return num
# Increment num
num += 1
return 0
# To find number to be added
# so sum of array is prime
def minNumber(arr):
s = 0
# To find sum of array elements
for i in range(0, len(arr)):
s += arr[i]
# If sum is already prime
# return 0
if isPrime(s) :
return 0
# To find prime number
# greater than sum
num = findPrime(s)
# Return difference of sum and num
return num - s
# Driver code
arr = [ 2, 4, 6, 8, 12 ]
print (minNumber(arr))
# This code is contributed by Sachin Bisht
C#
// C# program to find minimum number to
// insert in array so their sum is prime
using System;
class GFG
{
// function to check if a
// number is prime or not
static bool isPrime(int n)
{
// Corner case
if (n <= 1)
return false;
// Check from 2 to n - 1
for (int i = 2; i < n; i++)
if (n % i == 0)
return false;
return true;
}
// Find prime number
// greater than a number
static int findPrime(int n)
{
int num = n + 1;
// find prime greater than n
while (num > 0)
{
// check if num is prime
if (isPrime(num))
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
static int minNumber(int []arr, int n)
{
int sum = 0;
// To find sum of array elements
for (int i = 0; i < n; i++)
sum += arr[i];
// if sum is already prime
// return 0
if (isPrime(sum))
return 0;
// To find prime number
// greater than sum
int num = findPrime(sum);
// Return difference of sum and num
return num - sum;
}
// Driver Code
public static void Main()
{
int []arr = { 2, 4, 6, 8, 12 };
int n = arr.Length;
Console.Write(minNumber(arr, n));
}
}
// This code is contributed by nitin mittal
PHP
<?php
// PHP program to find minimum number to
// insert in array so their sum is prime
// function to check if a
// number is prime or not
function isPrime($n)
{
// Corner case
if ($n <= 1)
return false;
// Check from 2 to n - 1
for ($i = 2; $i < $n; $i++)
if ($n % $i == 0)
return false;
return true;
}
// Find prime number
// greater than a number
function findPrime($n)
{
$num = $n + 1;
// find prime greater than n
while ($num)
{
// check if num is prime
if (isPrime($num))
return $num;
// increment num
$num = $num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
function minNumber($arr, $n)
{
$sum = 0;
// To find sum of array elements
for ($i = 0; $i < $n; $i++)
$sum += $arr[$i];
// if sum is already prime
// return 0
if (isPrime($sum))
return 0;
// To find prime number
// greater than sum
$num = findPrime($sum);
// Return difference of
// sum and num
return $num - $sum;
}
// Driver Code
$arr = array(2, 4, 6, 8, 12);
$n = sizeof($arr);
echo minNumber($arr, $n);
// This code is contributed by nitin mittal
?>
JavaScript
<script>
// Javascript program to find minimum number to
// insert in array so their sum is prime
// function to check if a
// number is prime or not
function isPrime(n)
{
// Corner case
if (n <= 1)
return false;
// Check from 2 to n - 1
for (let i = 2; i < n; i++)
if (n % i == 0)
return false;
return true;
}
// Find prime number
// greater than a number
function findPrime(n)
{
let num = n + 1;
// find prime greater than n
while (num > 0)
{
// check if num is prime
if (isPrime(num))
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
function minNumber(arr,n)
{
let sum = 0;
// To find sum of array elements
for (let i = 0; i < n; i++)
sum += arr[i];
// if sum is already prime
// return 0
if (isPrime(sum))
return 0;
// To find prime number
// greater than sum
let num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// Driver Code
let arr=[2, 4, 6, 8, 12 ];
let n = arr.length;
document.write(minNumber(arr, n));
//This code is contributed by avanitrachhadiya2155
</script>
Time Complexity: O( N2 )
Efficient Approach: We can optimize the above approach by efficiently pre calculating a large boolean array to check if a number is prime or not using sieve of eratosthenes. Once all prime number are generated, find prime number just greater than sum and return the difference between them.
Below is the implementation of this approach:
C++
// C++ program to find minimum number to
// insert in array so their sum is prime
#include <bits/stdc++.h>
using namespace std;
#define MAX 100005
// Array to store primes
bool isPrime[MAX];
// function to calculate primes
// using sieve of eratosthenes
void sieveOfEratostheneses()
{
memset(isPrime, true, sizeof(isPrime));
isPrime[1] = false;
for (int i = 2; i * i < MAX; i++)
{
if (isPrime[i])
{
for (int j = 2 * i; j < MAX; j += i)
isPrime[j] = false;
}
}
}
// Find prime number
// greater than a number
int findPrime(int n)
{
int num = n + 1;
// To return prime number
// greater than n
while (num)
{
// check if num is prime
if (isPrime[num])
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
int minNumber(int arr[], int n)
{
// call sieveOfEratostheneses
// to calculate primes
sieveOfEratostheneses();
int sum = 0;
// To find sum of array elements
for (int i = 0; i < n; i++)
sum += arr[i];
if (isPrime[sum])
return 0;
// To find prime number
// greater then sum
int num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// Driver Code
int main()
{
int arr[] = { 2, 4, 6, 8, 12 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << minNumber(arr, n);
return 0;
}
Java
// Java program to find minimum number to
// insert in array so their sum is prime
class GFG
{
static int MAX = 100005;
// Array to store primes
static boolean[] isPrime = new boolean[MAX];
// function to calculate primes
// using sieve of eratosthenes
static void sieveOfEratostheneses()
{
isPrime[1] = true;
for (int i = 2; i * i < MAX; i++)
{
if (!isPrime[i])
{
for (int j = 2 * i; j < MAX; j += i)
isPrime[j] = true;
}
}
}
// Find prime number greater
// than a number
static int findPrime(int n)
{
int num = n + 1;
// To return prime number
// greater than n
while (num > 0)
{
// check if num is prime
if (!isPrime[num])
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
static int minNumber(int arr[], int n)
{
// call sieveOfEratostheneses
// to calculate primes
sieveOfEratostheneses();
int sum = 0;
// To find sum of array elements
for (int i = 0; i < n; i++)
sum += arr[i];
if (!isPrime[sum])
return 0;
// To find prime number
// greater then sum
int num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 2, 4, 6, 8, 12 };
int n = arr.length;
System.out.println(minNumber(arr, n));
}
}
// This code is contributed by mits
Python3
# Python3 program to find minimum number to
# insert in array so their sum is prime
isPrime = [1] * 100005
# function to calculate prime
# using sieve of eratosthenes
def sieveOfEratostheneses():
isPrime[1] = False
i = 2
while i * i < 100005:
if(isPrime[i]):
j = 2 * i
while j < 100005:
isPrime[j] = False
j += i
i += 1
return
# Find prime number
# greater than a number
def findPrime(n):
num = n + 1
# find prime greater than n
while(num):
# check if num is prime
if isPrime[num]:
return num
# Increment num
num += 1
return 0
# To find number to be added
# so sum of array is prime
def minNumber(arr):
# call sieveOfEratostheneses to
# calculate primes
sieveOfEratostheneses()
s = 0
# To find sum of array elements
for i in range(0, len(arr)):
s += arr[i]
# If sum is already prime
# return 0
if isPrime[s] == True:
return 0
# To find prime number
# greater than sum
num = findPrime(s)
# Return difference of
# sum and num
return num - s
# Driver code
arr = [ 2, 4, 6, 8, 12 ]
print (minNumber(arr))
# This code is contributed by Sachin Bisht
C#
// C# program to find minimum number to
// insert in array so their sum is prime
class GFG
{
static int MAX = 100005;
// Array to store primes
static bool[] isPrime = new bool[MAX];
// function to calculate primes
// using sieve of eratosthenes
static void sieveOfEratostheneses()
{
isPrime[1] = true;
for (int i = 2; i * i < MAX; i++)
{
if (!isPrime[i])
{
for (int j = 2 * i; j < MAX; j += i)
isPrime[j] = true;
}
}
}
// Find prime number greater
// than a number
static int findPrime(int n)
{
int num = n + 1;
// To return prime number
// greater than n
while (num > 0)
{
// check if num is prime
if (!isPrime[num])
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
static int minNumber(int[] arr, int n)
{
// call sieveOfEratostheneses
// to calculate primes
sieveOfEratostheneses();
int sum = 0;
// To find sum of array elements
for (int i = 0; i < n; i++)
sum += arr[i];
if (!isPrime[sum])
return 0;
// To find prime number
// greater then sum
int num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// Driver Code
public static void Main()
{
int[] arr = { 2, 4, 6, 8, 12 };
int n = arr.Length;
System.Console.WriteLine(minNumber(arr, n));
}
}
// This code is contributed by mits
PHP
<?php
// PHP program to find minimum number to
// insert in array so their sum is prime
$MAX =100005;
// function to calculate primes
// using sieve of eratosthenes
function sieveOfEratostheneses()
{
$isPrime = array_fill(true,$MAX, NULL);
$isPrime[1] = false;
for ($i = 2; $i * $i < $MAX; $i++)
{
if ($isPrime[$i])
{
for ($j = 2 * $i; $j < $MAX; $j += $i)
$isPrime[$j] = false;
}
}
}
// Find prime number
// greater than a number
function findPrime($n)
{
$num = $n + 1;
// To return prime number
// greater than n
while ($num)
{
// check if num is prime
if ($isPrime[$num])
return $num;
// increment num
$num = $num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
function minNumber(&$arr, $n)
{
// call sieveOfEratostheneses
// to calculate primes
sieveOfEratostheneses();
$sum = 0;
// To find sum of array elements
for ($i = 0; $i < $n; $i++)
$sum += $arr[$i];
if ($isPrime[$sum])
return 0;
// To find prime number
// greater then sum
$num = findPrime($sum);
// Return difference of
// sum and num
return $num - $sum;
}
// Driver Code
$arr = array ( 2, 4, 6, 8, 12 );
$n = sizeof($arr) / sizeof($arr[0]);
echo minNumber($arr, $n);
return 0;
?>
JavaScript
<script>
// Javascript program to find minimum number to
// insert in array so their sum is prime
let MAX = 100005;
// Array to store primes
let isPrime = new Array(MAX).fill(0);
// function to calculate primes
// using sieve of eratosthenes
function sieveOfEratostheneses()
{
isPrime[1] = true;
for (let i = 2; i * i < MAX; i++)
{
if (!isPrime[i])
{
for (let j = 2 * i; j < MAX; j += i)
isPrime[j] = true;
}
}
}
// Find prime number greater
// than a number
function findPrime(n)
{
let num = n + 1;
// To return prime number
// greater than n
while (num > 0)
{
// check if num is prime
if (!isPrime[num])
return num;
// increment num
num = num + 1;
}
return 0;
}
// To find number to be added
// so sum of array is prime
function minNumber(arr, n)
{
// call sieveOfEratostheneses
// to calculate primes
sieveOfEratostheneses();
let sum = 0;
// To find sum of array elements
for (let i = 0; i < n; i++)
sum += arr[i];
if (!isPrime[sum])
return 0;
// To find prime number
// greater then sum
let num = findPrime(sum);
// Return difference of
// sum and num
return num - sum;
}
// driver program
let arr = [ 2, 4, 6, 8, 12 ];
let n = arr.length;
document.write(minNumber(arr, n));
// This code is contributed by code_hunt.
</script>
Time Complexity: O(N log(log N))
Similar Reads
Sum of Maximum and Minimum prime factor of every number in the Array
Given an array arr[], the task is to find the sum of the maximum and the minimum prime factor of every number in the given array.Examples: Input: arr[] = {15} Output: 8 The maximum and the minimum prime factors of 15 are 5 and 3 respectively.Input: arr[] = {5, 10, 15, 20, 25, 30} Output: 10 7 8 7 10
9 min read
Count the number of primes in the prefix sum array of the given array
Given an array arr[] of N integers, the task is to count the number of primes in the prefix sum array of the given array. Examples: Input: arr[] = {1, 4, 8, 4} Output: 3 The prefix sum array is {1, 5, 13, 17} and the three primes are 5, 13 and 17. Input: arr[] = {1, 5, 2, 3, 7, 9} Output: 1 Approach
9 min read
Sum of every Kâth prime number in an array
Given an integer k and an array of integers arr (less than 10^6), the task is to find the sum of every kâth prime number in the array. Examples: Input: arr[] = {2, 3, 5, 7, 11}, k = 2 Output: 10 All the elements of the array are prime. So, the prime numbers after every K (i.e. 2) interval are 3, 7 a
9 min read
Sum of every K'th prime number in an array
Given an array of integers (less than 10^6), the task is to find the sum of all the prime numbers which appear after every (k-1) prime number i.e. every K'th prime number in the array. Examples: Input : Array : 2, 3, 5, 7, 11 ; n=5; k=2 Output : Sum = 10 Explanation: All the elements of the array ar
7 min read
Nearest prime number in the array of every array element
Given an integer array arr[] consisting of N integers, the task is to find the nearest Prime Number in the array for every element in the array. If the array does not contain any prime number, then print -1. Examples: Input: arr[] = {1, 2, 3, 1, 6} Output: 2 2 3 3 3 Explanation: For the subarray {1,
11 min read
Minimize sum of prime numbers added to make an array non-decreasing
Given an array arr[], the task is to convert it into a non-decreasing array by adding primes to array elements such that the sum of the primes added is the minimum possible. Examples: Input: arr[] = {2, 1, 5, 4, 3} Output: 7 Explanation: {2, 1, 5, 4, 3} -> {2, 3, 5, 6, 6} By changing the 2nd elem
12 min read
Generate an array of minimum sum whose XOR of same-indexed elements with given array are Prime Numbers
Given an array Arr[] of N ( 1 ? N ? 105)integers, the task is to generate an array B[] consisting of N non-zero elements, such that XOR of Ai ^ Bi always results in a prime number. Note: The sum of XORs obtained should be minimized. Examples: Input: arr[] = {5, 4, 7, 6} Output: {7, 6, 5, 4} Explanat
5 min read
Find third number such that sum of all three number becomes prime
Given two numbers A and B. The task is to find the smallest positive integer greater than or equal to 1 such that the sum of all three numbers become a prime number.Examples: Input: A = 2, B = 3 Output: 2 Explanation: The third number is 2 because if we add all three number the sum obtained is 7 whi
5 min read
Find the sum of prime numbers in the Kth array
Given K arrays where the first array contains the first prime number, the second array contains the next 2 primes and the third array contains the next 3 primes and so on. The task is to find the sum of primes in the Kth array.Examples: Input: K = 3 Output: 31 arr1[] = {2} arr[] = {3, 5} arr[] = {7,
9 min read
Count number of primes in an array
Given an array arr[] of N positive integers. The task is to write a program to count the number of prime elements in the given array. Examples: Input: arr[] = {1, 3, 4, 5, 7} Output: 3 There are three primes, 3, 5 and 7 Input: arr[] = {1, 2, 3, 4, 5, 6, 7} Output: 4 Naive Approach: A simple solution
8 min read