Given a positive integer N greater than 1, the task is to find the minimum count of Prime Numbers whose sum is equal to given N.
Examples:
Input: N = 100
Output: 2
Explanation:
100 can be written as sum of 2 prime numbers 97 and 3.
Input: N = 25
Output: 2
Explanation:
25 can be written as sum of 2 prime numbers 23 and 2.
Approach:
For the minimum number of primes whose sum is the given number N, Prime Numbers must be as large as possible. Following are the observation for the above problem statement:
- Case 1: If the number is prime, then the minimum primes numbers required to make sum N is 1.
- Case 2: If the number is even, then it can be expressed as a sum of two primes as per the Goldbach’s Conjecture for every even integer greater than 2. Therefore the minimum prime number required to make the sum N is 2.
- Case 3: If the number is odd:
- If (N-2) is prime, then the minimum prime number required to make the given sum N is 2.
- Else The minimum prime numbers required to make the given sum N is 3 because:
As N is odd, then (N - 3) is even.
Hence As per case 2:
The minimum prime number required to make the sum (N-3) is 2.
Therefore,
The minimum prime number required to make the sum N is 3(2+1).
Below are the steps:
- Check whether the given number N is prime or not, by using the approach discussed in this article. If Yes then print 1.
- Else as per the above Cases print the minimum number of Prime Numbers required to make the given sum N.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool isPrime( int n)
{
for ( int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false ;
}
}
return true ;
}
void printMinCountPrime( int N)
{
int minCount;
if (isPrime(N)) {
minCount = 1;
}
else if (N % 2 == 0) {
minCount = 2;
}
else {
if (isPrime(N - 2)) {
minCount = 2;
}
else {
minCount = 3;
}
}
cout << minCount << endl;
}
int main()
{
int N = 100;
printMinCountPrime(N);
return 0;
}
|
Java
class GFG{
static boolean isPrime( int n)
{
for ( int i = 2 ; i * i <= n; i++) {
if (n % i == 0 ) {
return false ;
}
}
return true ;
}
static void printMinCountPrime( int N)
{
int minCount;
if (isPrime(N)) {
minCount = 1 ;
}
else if (N % 2 == 0 ) {
minCount = 2 ;
}
else {
if (isPrime(N - 2 )) {
minCount = 2 ;
}
else {
minCount = 3 ;
}
}
System.out.print(minCount + "\n" );
}
public static void main(String[] args)
{
int N = 100 ;
printMinCountPrime(N);
}
}
|
Python3
def isPrime(n) :
for i in range ( 2 , int (n * * ( 1 / 2 )) + 1 ) :
if (n % i = = 0 ) :
return False ;
return True ;
def printMinCountPrime(N) :
if (isPrime(N)) :
minCount = 1 ;
elif (N % 2 = = 0 ) :
minCount = 2 ;
else :
if (isPrime(N - 2 )) :
minCount = 2 ;
else :
minCount = 3 ;
print (minCount) ;
if __name__ = = "__main__" :
N = 100 ;
printMinCountPrime(N);
|
C#
using System;
class GFG{
static bool isPrime( int n)
{
for ( int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false ;
}
}
return true ;
}
static void printMinCountPrime( int N)
{
int minCount;
if (isPrime(N)) {
minCount = 1;
}
else if (N % 2 == 0) {
minCount = 2;
}
else {
if (isPrime(N - 2)) {
minCount = 2;
}
else {
minCount = 3;
}
}
Console.WriteLine(minCount + "\n" );
}
public static void Main( string [] args)
{
int N = 100;
printMinCountPrime(N);
}
}
|
Javascript
<script>
function isPrime(n)
{
for (let i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false ;
}
}
return true ;
}
function printMinCountPrime(N)
{
let minCount;
if (isPrime(N)) {
minCount = 1;
}
else if (N % 2 == 0) {
minCount = 2;
}
else {
if (isPrime(N - 2)) {
minCount = 2;
}
else {
minCount = 3;
}
}
document.write(minCount + "<br>" );
}
let N = 100;
printMinCountPrime(N);
</script>
|
Time Complexity: O(?N), where N is the given number.
Auxiliary Space: O(1)