# N expressed as sum of 4 prime numbers

Express a given number as a summation of 4 positive primes. If it is not possible to express then print “-1”.

Examples:

```Input: 24
Output: 3 11 3 7
Explanation : 3+11+3+7 = 24 and 3, 11, 7 are all prime.

Input: 46
Output: 11 11 17 7
explanation : 11+11+17+7 = 46 and 11, 7, 17 are all prime.
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

Approach : Every even integer greater than 2 can be expressed as the sum of two numbers by Goldbach’s conjecture.

Below are some facts for expressing a number as sum of 4 primes.

• Number must be greater than or equal to 8 as 2 is the smallest prime
• If given number is even, we can break it as (2 + 2) + x so that x remains even and can broken into two primes.
• If given number is odd, we can break it as (2 + 3) + x so that x remains even and can broken into two primes.

Now we can easily express n as sum of two primes using link

## C++

 `// CPP program to express n as sum of 4 primes. ` `#include ` `using` `namespace` `std; ` ` `  `// funcion to check if a number is prime or not ` `int` `isPrime(``int` `x) ` `{ ` `    ``// does square root of the number ` `    ``int` `s = ``sqrt``(x); ` ` `  `    ``// traverse from 2 to sqrt(n) ` `    ``for` `(``int` `i = 2; i <= s; i++) ` ` `  `        ``// if any divisor found then non prime ` `        ``if` `(x % i == 0) ` `            ``return` `0; ` ` `  `    ``// if no divisor is found then it is a prime ` `    ``return` `1; ` `} ` ` `  `void` `Num(``int` `x, ``int``& a, ``int``& b) ` `{ ` `    ``// iterates to check prime or not ` `    ``for` `(``int` `i = 2; i <= x / 2; i++) { ` ` `  `        ``// calls function to check if i and x-i ` `        ``// is prime or not ` `        ``if` `(isPrime(i) && isPrime(x - i)) { ` ` `  `            ``a = i; ` `            ``b = x - i; ` ` `  `            ``// if two prime numbers are found, ` `            ``// then return ` `            ``return``; ` `        ``} ` `    ``} ` `} ` ` `  `// function to generate 4 prime numbers adding upto n ` `void` `generate(``int` `n) ` `{ ` `    ``// if n<=7 then 4 numbers cannot sum to ` `    ``// get that number ` `    ``if` `(n <= 7) ` `        ``cout << ``"Impossible to form"` `<< endl; ` ` `  `    ``// a and b stores the last two numbers ` `    ``int` `a, b; ` ` `  `    ``// if it is not even then 2 and 3 are first ` `    ``// two of sequence ` `    ``if` `(n % 2 != 0) { ` ` `  `        ``// calls the function to get the other ` `        ``// two prime numbers considering first two ` `        ``// primes as 2 and 3 (Note 2 + 3 = 5) ` `        ``Num(n - 5, a, b); ` ` `  `        ``// print 2 and 3 as the firsts two prime ` `        ``// and a and b as the last two. ` `        ``cout << ``"2 3 "` `<< a << ``" "` `<< b << endl; ` `    ``} ` ` `  `    ``// if it is even then 2 and 2 are first two ` `    ``// of sequence ` `    ``else` `{ ` ` `  `        ``/// calls the function to get the other ` `        ``// two prime numbers considering first two ` `        ``// primes as 2 and 2 (Note 2 + 2 = 4) ` `        ``Num(n - 4, a, b); ` ` `  `        ``// print 2 and 2 as the firsts two prime ` `        ``// and a and b as the last two. ` `        ``cout << ``"2 2 "` `<< a << ``" "` `<< b << endl; ` `    ``} ` `} ` ` `  `// driver program to test the above function ` `int` `main() ` `{ ` `    ``int` `n = 28; ` `    ``generate(n); ` `    ``return` `0; ` `} `

## Java

 `// Java program to express n as sum of ` `// 4 primes. ` `class` `GFG { ` ` `  `    ``static` `int` `a = ``0``, b = ``0``; ` ` `  `    ``// funcion to check if a number ` `    ``// is prime or not ` `    ``static` `int` `isPrime(``int` `x) ` `    ``{ ` ` `  `        ``// does square root of the ` `        ``// number ` `        ``int` `s = (``int``)Math.sqrt(x); ` ` `  `        ``// traverse from 2 to sqrt(n) ` `        ``for` `(``int` `i = ``2``; i <= s; i++) ` ` `  `            ``// if any divisor found ` `            ``// then non prime ` `            ``if` `(x % i == ``0``) ` `                ``return` `0``; ` ` `  `        ``// if no divisor is found ` `        ``// then it is a prime ` `        ``return` `1``; ` `    ``} ` ` `  `    ``static` `void` `Num(``int` `x) ` `    ``{ ` ` `  `        ``// iterates to check prime ` `        ``// or not ` `        ``for` `(``int` `i = ``2``; i <= x / ``2``; i++) { ` ` `  `            ``// calls function to check ` `            ``// if i and x-i is prime ` `            ``// or not ` `            ``if` `(isPrime(i) != ``0` `&& isPrime(x - i) != ``0``) { ` ` `  `                ``a = i; ` `                ``b = x - i; ` ` `  `                ``// if two prime numbers ` `                ``// are found, then return ` `                ``return``; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// function to generate 4 prime ` `    ``// numbers adding upto n ` `    ``static` `void` `generate(``int` `n) ` `    ``{ ` ` `  `        ``// if n<=7 then 4 numbers cannot ` `        ``// sum to get that number ` `        ``if` `(n <= ``7``) ` `            ``System.out.println(``"Impossible"` `                               ``+ ``" to form"``); ` ` `  `        ``// if it is not even then 2 and 3 ` `        ``// are first two of sequence ` `        ``if` `(n % ``2` `!= ``0``) { ` ` `  `            ``// calls the function to get the ` `            ``// other two prime numbers ` `            ``// considering first two primes ` `            ``// as 2 and 3 (Note 2 + 3 = 5) ` `            ``Num(n - ``5``); ` ` `  `            ``// print 2 and 3 as the firsts ` `            ``// two prime and a and b as the ` `            ``// last two. ` `            ``System.out.println(``"2 3 "` `+ a + ``" "` `+ b); ` `        ``} ` ` `  `        ``// if it is even then 2 and 2 are ` `        ``// first two of sequence ` `        ``else` `{ ` ` `  `            ``/// calls the function to get the ` `            ``// other two prime numbers ` `            ``// considering first two primes as ` `            ``// 2 and 2 (Note 2 + 2 = 4) ` `            ``Num(n - ``4``); ` ` `  `            ``// print 2 and 2 as the firsts ` `            ``// two prime and a and b as the ` `            ``// last two. ` `            ``System.out.println(``"2 2 "` `+ a + ``" "` `+ b); ` `        ``} ` `    ``} ` ` `  `    ``// Driver function to test the above ` `    ``// function ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `n = ``28``; ` ` `  `        ``generate(n); ` `    ``} ` `} ` ` `  `// This code is contributed by Anant Agarwal. `

## Python3

 `# Python3 program to express  ` `# n as sum of 4 primes. ` `import` `math; ` `# funcion to check if a  ` `# number is prime or not ` `def` `isPrime(x): ` `    ``# does square root ` `    ``# of the number ` `    ``s ``=` `int``(math.sqrt(x)) ` `     `  `    ``# traverse from 2 to sqrt(n) ` `    ``for` `i ``in` `range``(``2``,s``+``1``): ` `        ``# if any divisor found ` `        ``# then non prime ` `        ``if` `(x ``%` `i ``=``=` `0``): ` `            ``return` `0` `    ``# if no divisor is found ` `    ``# then it is a prime ` `    ``return` `1` ` `  `def` `Num(x): ` `    ``# iterates to check ` `    ``# prime or not ` `    ``ab``=``[``0``]``*``2` `    ``for` `i ``in` `range``(``2``,``int``(x ``/` `2``)``+``1``): ` `        ``# calls function to check ` `        ``# if i and x-i is prime ` `        ``# or not ` `        ``if` `(isPrime(i) !``=` `0` `and` `isPrime(x ``-` `i) !``=` `0``): ` `            ``ab[``0``] ``=` `i ` `            ``ab[``1``] ``=` `x ``-` `i ` `            ``# if two prime numbers ` `            ``# are found, then return ` `            ``return` `ab ` ` `  `# function to generate 4 prime ` `# numbers adding upto n ` `def` `generate(n): ` `    ``# if n<=7 then 4 numbers cannot ` `    ``# sum to get that number ` `    ``if``(n <``=` `7``): ` `        ``print``(``"Impossible to form"``) ` `     `  `    ``# if it is not even then 2 and ` `    ``# 3 are first two of sequence ` `     `  `    ``if` `(n ``%` `2` `!``=` `0``): ` `        ``# calls the function to get ` `        ``# the other two prime numbers ` `        ``# considering first two primes ` `        ``# as 2 and 3 (Note 2 + 3 = 5) ` `        ``ab``=``Num(n ``-` `5``) ` `         `  `        ``# print 2 and 3 as the firsts ` `        ``# two prime and a and b as the ` `        ``# last two. ` `        ``print``(``"2 3"``,ab[``0``],ab[``1``]) ` `         `  `        ``# if it is even then 2 and 2 are ` `        ``# first two of sequence ` `    ``else``: ` `        ``# calls the function to get ` `        ``# the other two prime numbers ` `        ``# considering first two primes ` `        ``# as 2 and 2 (Note 2 + 2 = 4) ` `        ``ab``=``Num(n ``-` `4``) ` `         `  `        ``# print 2 and 2 as the firsts ` `        ``# two prime and a and b as the ` `        ``# last two. ` `        ``print``(``"2 2"``,ab[``0``],ab[``1``])  ` ` `  `# Driver Code ` `if` `__name__``=``=``'__main__'``: ` `    ``n ``=` `28` `    ``generate(n) ` ` `  `# This code is contributed by mits. `

## C#

 `// C# program to express n as sum of ` `// 4 primes. ` `using` `System; ` ` `  `class` `GFG { ` ` `  `    ``static` `int` `a = 0, b = 0; ` ` `  `    ``// funcion to check if a number ` `    ``// is prime or not ` `    ``static` `int` `isPrime(``int` `x) ` `    ``{ ` ` `  `        ``// does square root of the ` `        ``// number ` `        ``int` `s = (``int``)Math.Sqrt(x); ` ` `  `        ``// traverse from 2 to sqrt(n) ` `        ``for` `(``int` `i = 2; i <= s; i++) ` ` `  `            ``// if any divisor found ` `            ``// then non prime ` `            ``if` `(x % i == 0) ` `                ``return` `0; ` ` `  `        ``// if no divisor is found ` `        ``// then it is a prime ` `        ``return` `1; ` `    ``} ` ` `  `    ``static` `void` `Num(``int` `x) ` `    ``{ ` ` `  `        ``// iterates to check prime ` `        ``// or not ` `        ``for` `(``int` `i = 2; i <= x / 2; i++) ` `        ``{ ` ` `  `            ``// calls function to check ` `            ``// if i and x-i is prime ` `            ``// or not ` `            ``if` `(isPrime(i) != 0 &&  ` `                     ``isPrime(x - i) != 0) ` `            ``{ ` ` `  `                ``a = i; ` `                ``b = x - i; ` ` `  `                ``// if two prime numbers ` `                ``// are found, then return ` `                ``return``; ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``// function to generate 4 prime ` `    ``// numbers adding upto n ` `    ``static` `void` `generate(``int` `n) ` `    ``{ ` ` `  `        ``// if n<=7 then 4 numbers cannot ` `        ``// sum to get that number ` `        ``if` `(n <= 7) ` `            ``Console.Write(``"Impossible"` `                        ``+ ``" to form"``); ` ` `  `        ``// if it is not even then 2 and ` `        ``// 3 are first two of sequence ` `        ``if` `(n % 2 != 0) { ` ` `  `            ``// calls the function to get ` `            ``// the other two prime numbers ` `            ``// considering first two primes ` `            ``// as 2 and 3 (Note 2 + 3 = 5) ` `            ``Num(n - 5); ` ` `  `            ``// print 2 and 3 as the firsts ` `            ``// two prime and a and b as the ` `            ``// last two. ` `            ``Console.Write(``"2 3 "` `+ a + ``" "` `                                      ``+ b); ` `        ``} ` ` `  `        ``// if it is even then 2 and 2 are ` `        ``// first two of sequence ` `        ``else` `{ ` ` `  `            ``/// calls the function to get ` `            ``// the other two prime numbers ` `            ``// considering first two primes ` `            ``// as 2 and 2 (Note 2 + 2 = 4) ` `            ``Num(n - 4); ` ` `  `            ``// print 2 and 2 as the firsts ` `            ``// two prime and a and b as the ` `            ``// last two. ` `            ``Console.Write(``"2 2 "` `+ a + ``" "`  `                                      ``+ b); ` `        ``} ` `    ``} ` ` `  `    ``// Driver function to test the above ` `    ``// function ` `    ``public` `static` `void` `Main() ` `    ``{ ` `        ``int` `n = 28; ` ` `  `        ``generate(n); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal. `

## PHP

 ` `

Output:

```2 2 5 19
```

Time complexity: O(n sqrt(n))
Auxiliary space: O(1)