# Minimize the cost to split a number

Given an integer N ≥ 2, you can split the number as a sum of k integers i.e. N = k1 + k2 + … + kn where each kth element is ≥ 2 then the cost of splitting is calculated as maxDiv(k1) + maxDiv(k2) + … + maxDiv(kn) where maxDiv(x) is the maximum divisor of x which is < x.

The task is to split the number in such a way that the cost is minimized, print the minimized cost in the end.

Examples:

Input: N = 6
Output: 2
6 can be represented as (3 + 3) and the cost will be 1 + 1 = 2.

Input: N = 5
Output: 1

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach:

• When n is prime then the cost will be 1 as we don’t have to split n and the greatest divisor of n less than itself will be 1.
• If n is odd and n – 2 is prime then n can be split into (2 + prime) which will cost 1 + 1 = 2.
• If n is even then the cost will be 2 as according to Goldbach’s conjecture, every even number greater than 2 can be expressed as sum of two primes which is proven till 4 * 1018.
• If all of the above conditions are not satisfied then n must be odd now and if 3 is subtracted from n then it will become even which can be expressed as (3 + even) = (3 + prime + prime) which will cost 3.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// check if a number is prime or not ` `bool` `isPrime(``int` `x) ` `{ ` `    ``// run a loop upto square root of x ` `    ``for` `(``int` `i = 2; i * i <= x; i++) { ` `        ``if` `(x % i == 0) ` `            ``return` `0; ` `    ``} ` `    ``return` `1; ` `} ` ` `  `// Function to return the minimized cost ` `int` `minimumCost(``int` `n) ` `{ ` `    ``// If n is prime ` `    ``if` `(isPrime(n)) ` `        ``return` `1; ` ` `  `    ``// If n is odd and can be ` `    ``// split into (prime + 2) ` `    ``// then cost will be 1 + 1 = 2 ` `    ``if` `(n % 2 == 1 && isPrime(n - 2)) ` `        ``return` `2; ` ` `  `    ``// Every non-prime even number ` `    ``// can be expressed as the ` `    ``// sum of two primes ` `    ``if` `(n % 2 == 0) ` `        ``return` `2; ` ` `  `    ``// n is odd so n can be split into (3 + even) ` `    ``// further even part can be ` `    ``// split into (prime + prime) ` `    ``// (3 + prime + prime) will cost 3 ` `    ``return` `3; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `n = 6; ` `    ``cout << minimumCost(n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `// check if a number is prime or not ` `static` `boolean` `isPrime(``int` `x) ` `{ ` `    ``// run a loop upto square root of x ` `    ``for` `(``int` `i = ``2``; i * i <= x; i++)  ` `    ``{ ` `        ``if` `(x % i == ``0``) ` `            ``return` `false``; ` `    ``} ` `    ``return` `true``; ` `} ` ` `  `// Function to return the minimized cost ` `static` `int` `minimumCost(``int` `n) ` `{ ` `    ``// If n is prime ` `    ``if` `(isPrime(n)) ` `        ``return` `1``; ` ` `  `    ``// If n is odd and can be ` `    ``// split into (prime + 2) ` `    ``// then cost will be 1 + 1 = 2 ` `    ``if` `(n % ``2` `== ``1` `&& isPrime(n - ``2``)) ` `        ``return` `2``; ` ` `  `    ``// Every non-prime even number ` `    ``// can be expressed as the ` `    ``// sum of two primes ` `    ``if` `(n % ``2` `== ``0``) ` `        ``return` `2``; ` ` `  `    ``// n is odd so n can be split into (3 + even) ` `    ``// further even part can be ` `    ``// split into (prime + prime) ` `    ``// (3 + prime + prime) will cost 3 ` `    ``return` `3``; ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String args[]) ` `{ ` `    ``int` `n = ``6``; ` `    ``System.out.println(minimumCost(n)); ` `} ` `} ` ` `  `// This code is contributed by ` `// Surendra_Gangwar `

## Python3

 `# Python3 implementation of the approach  ` `from` `math ``import` `sqrt ` ` `  `# check if a number is prime or not  ` `def` `isPrime(x) :  ` ` `  `    ``# run a loop upto square root of x  ` `    ``for` `i ``in` `range``(``2``, ``int``(sqrt(x)) ``+` `1``) : ` `        ``if` `(x ``%` `i ``=``=` `0``) : ` `            ``return` `0``;  ` `             `  `    ``return` `1``;  ` ` `  `# Function to return the minimized cost  ` `def` `minimumCost(n) : ` ` `  `    ``# If n is prime  ` `    ``if` `(isPrime(n)) : ` `        ``return` `1``;  ` ` `  `    ``# If n is odd and can be  ` `    ``# split into (prime + 2)  ` `    ``# then cost will be 1 + 1 = 2  ` `    ``if` `(n ``%` `2` `=``=` `1` `and` `isPrime(n ``-` `2``)) :  ` `        ``return` `2``;  ` ` `  `    ``# Every non-prime even number  ` `    ``# can be expressed as the  ` `    ``# sum of two primes  ` `    ``if` `(n ``%` `2` `=``=` `0``) : ` `        ``return` `2``;  ` ` `  `    ``# n is odd so n can be split into  ` `    ``# (3 + even) further even part can be  ` `    ``# split into (prime + prime)  ` `    ``# (3 + prime + prime) will cost 3  ` `    ``return` `3``;  ` ` `  `# Driver code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` ` `  `    ``n ``=` `6``;  ` `    ``print``(minimumCost(n));  ` `     `  `# This code is contributed by Ryuga `

## C#

 `// C# implementation of the approach ` `using` `System; ` `public` `class` `GFG ` `{ ` `  `  `// check if a number is prime or not ` `static` `bool` `isPrime(``int` `x) ` `{ ` `    ``// run a loop upto square root of x ` `    ``for` `(``int` `i = 2; i * i <= x; i++)  ` `    ``{ ` `        ``if` `(x % i == 0) ` `            ``return` `false``; ` `    ``} ` `    ``return` `true``; ` `} ` `  `  `// Function to return the minimized cost ` `static` `int` `minimumCost(``int` `n) ` `{ ` `    ``// If n is prime ` `    ``if` `(isPrime(n)) ` `        ``return` `1; ` `  `  `    ``// If n is odd and can be ` `    ``// split into (prime + 2) ` `    ``// then cost will be 1 + 1 = 2 ` `    ``if` `(n % 2 == 1 && isPrime(n - 2)) ` `        ``return` `2; ` `  `  `    ``// Every non-prime even number ` `    ``// can be expressed as the ` `    ``// sum of two primes ` `    ``if` `(n % 2 == 0) ` `        ``return` `2; ` `  `  `    ``// n is odd so n can be split into (3 + even) ` `    ``// further even part can be ` `    ``// split into (prime + prime) ` `    ``// (3 + prime + prime) will cost 3 ` `    ``return` `3; ` `} ` `  `  `// Driver code ` `public` `static` `void` `Main(String []args) ` `{ ` `    ``int` `n = 6; ` `    ``Console.WriteLine(minimumCost(n)); ` `} ` `} ` `  `  `// This code is contributed by ` `// Rajput-Ji `

## PHP

 `

Output:

```2
``` My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.