# Minimum number of primes required such that their sum is equal to N

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 = 100Output:2Explanation:

100 can be written as sum of 2 prime numbers 97 and 3.Input:N = 25Output:3Explanation:

25 can be written as sum of 3 prime numbers 11, 11, and 3.

**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).

- If

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++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` ` ` `// Function to check if n is prime` `bool` `isPrime(` `int` `n)` `{` ` ` `for` `(` `int` `i = 2; i * i <= n; i++) {` ` ` `if` `(n % i == 0) {` ` ` `return` `false` `;` ` ` `}` ` ` `}` ` ` `return` `true` `;` `}` ` ` `// Function to count the minimum` `// prime required for given sum N` `void` `printMinCountPrime(` `int` `N)` `{` ` ` ` ` `int` `minCount;` ` ` ` ` `// Case 1:` ` ` `if` `(isPrime(N)) {` ` ` `minCount = 1;` ` ` `}` ` ` ` ` `// Case 2:` ` ` `else` `if` `(N % 2 == 0) {` ` ` `minCount = 2;` ` ` `}` ` ` ` ` `// Case 3:` ` ` `else` `{` ` ` ` ` `// Case 3a:` ` ` `if` `(isPrime(N - 2)) {` ` ` `minCount = 2;` ` ` `}` ` ` ` ` `// Case 3b:` ` ` `else` `{` ` ` `minCount = 3;` ` ` `}` ` ` `}` ` ` ` ` `cout << minCount << endl;` `}` ` ` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 100;` ` ` ` ` `// Function Call` ` ` `printMinCountPrime(N);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `class` `GFG{` ` ` `// Function to check if n is prime` `static` `boolean` `isPrime(` `int` `n)` `{` ` ` `for` `(` `int` `i = ` `2` `; i * i <= n; i++) {` ` ` `if` `(n % i == ` `0` `) {` ` ` `return` `false` `;` ` ` `}` ` ` `}` ` ` `return` `true` `;` `}` ` ` `// Function to count the minimum` `// prime required for given sum N` `static` `void` `printMinCountPrime(` `int` `N)` `{` ` ` ` ` `int` `minCount;` ` ` ` ` `// Case 1:` ` ` `if` `(isPrime(N)) {` ` ` `minCount = ` `1` `;` ` ` `}` ` ` ` ` `// Case 2:` ` ` `else` `if` `(N % ` `2` `== ` `0` `) {` ` ` `minCount = ` `2` `;` ` ` `}` ` ` ` ` `// Case 3:` ` ` `else` `{` ` ` ` ` `// Case 3a:` ` ` `if` `(isPrime(N - ` `2` `)) {` ` ` `minCount = ` `2` `;` ` ` `}` ` ` ` ` `// Case 3b:` ` ` `else` `{` ` ` `minCount = ` `3` `;` ` ` `}` ` ` `}` ` ` ` ` `System.out.print(minCount +` `"\n"` `);` `}` ` ` `// Driver Code` `public` `static` `void` `main(String[] args)` `{` ` ` `int` `N = ` `100` `;` ` ` ` ` `// Function Call` ` ` `printMinCountPrime(N);` `}` `}` ` ` `// This code is contributed by 29AjayKumar` |

## Python3

`# Python3 program for the above approach ` ` ` `# Function to check if n is prime ` `def` `isPrime(n) : ` ` ` ` ` `for` `i ` `in` `range` `(` `2` `, ` `int` `(n ` `*` `*` `(` `1` `/` `2` `)) ` `+` `1` `) :` ` ` `if` `(n ` `%` `i ` `=` `=` `0` `) :` ` ` `return` `False` `; ` ` ` ` ` `return` `True` `; ` ` ` `# Function to count the minimum ` `# prime required for given sum N ` `def` `printMinCountPrime(N) : ` ` ` ` ` `# Case 1: ` ` ` `if` `(isPrime(N)) :` ` ` `minCount ` `=` `1` `; ` ` ` ` ` `# Case 2: ` ` ` `elif` `(N ` `%` `2` `=` `=` `0` `) :` ` ` `minCount ` `=` `2` `; ` ` ` ` ` `# Case 3: ` ` ` `else` `: ` ` ` ` ` `# Case 3a: ` ` ` `if` `(isPrime(N ` `-` `2` `)) :` ` ` `minCount ` `=` `2` `; ` ` ` ` ` `# Case 3b: ` ` ` `else` `:` ` ` `minCount ` `=` `3` `; ` ` ` ` ` `print` `(minCount) ; ` ` ` `# Driver Code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` `N ` `=` `100` `; ` ` ` ` ` `# Function Call ` ` ` `printMinCountPrime(N); ` ` ` `# This code is contributed by AnkitRai01` |

## C#

`// C# program for the above approach` `using` `System;` ` ` `class` `GFG{` ` ` `// Function to check if n is prime` `static` `bool` `isPrime(` `int` `n)` `{` ` ` `for` `(` `int` `i = 2; i * i <= n; i++) {` ` ` `if` `(n % i == 0) {` ` ` `return` `false` `;` ` ` `}` ` ` `}` ` ` `return` `true` `;` `}` ` ` `// Function to count the minimum` `// prime required for given sum N` `static` `void` `printMinCountPrime(` `int` `N)` `{` ` ` ` ` `int` `minCount;` ` ` ` ` `// Case 1:` ` ` `if` `(isPrime(N)) {` ` ` `minCount = 1;` ` ` `}` ` ` ` ` `// Case 2:` ` ` `else` `if` `(N % 2 == 0) {` ` ` `minCount = 2;` ` ` `}` ` ` ` ` `// Case 3:` ` ` `else` `{` ` ` ` ` `// Case 3a:` ` ` `if` `(isPrime(N - 2)) {` ` ` `minCount = 2;` ` ` `}` ` ` ` ` `// Case 3b:` ` ` `else` `{` ` ` `minCount = 3;` ` ` `}` ` ` `}` ` ` ` ` `Console.WriteLine(minCount +` `"\n"` `);` `}` ` ` `// Driver Code` `public` `static` `void` `Main(` `string` `[] args)` `{` ` ` `int` `N = 100;` ` ` ` ` `// Function Call` ` ` `printMinCountPrime(N);` `}` `}` ` ` `// This code is contributed by AnkitRai01` |

## Javascript

`<script>` ` ` `// JavaScript program for the above approach` ` ` ` ` `// Function to check if n is prime` `function` `isPrime(n)` `{` ` ` `for` `(let i = 2; i * i <= n; i++) {` ` ` `if` `(n % i == 0) {` ` ` `return` `false` `;` ` ` `}` ` ` `}` ` ` `return` `true` `;` `}` ` ` `// Function to count the minimum` `// prime required for given sum N` `function` `printMinCountPrime(N)` `{` ` ` ` ` `let minCount;` ` ` ` ` `// Case 1:` ` ` `if` `(isPrime(N)) {` ` ` `minCount = 1;` ` ` `}` ` ` ` ` `// Case 2:` ` ` `else` `if` `(N % 2 == 0) {` ` ` `minCount = 2;` ` ` `}` ` ` ` ` `// Case 3:` ` ` `else` `{` ` ` ` ` `// Case 3a:` ` ` `if` `(isPrime(N - 2)) {` ` ` `minCount = 2;` ` ` `}` ` ` ` ` `// Case 3b:` ` ` `else` `{` ` ` `minCount = 3;` ` ` `}` ` ` `}` ` ` ` ` `document.write(minCount + ` `"<br>"` `);` `}` ` ` `// Driver Code` ` ` `let N = 100;` ` ` `// Function Call` `printMinCountPrime(N);` ` ` ` ` `// This code is contributed by gfgking` ` ` `</script>` |

**Output:**

2

**Time Complexity:** O(√N), where N is the given number.