GeeksforGeeks App
Open App
Browser
Continue

# 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.```

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;` `// function 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``;` `    ``// function 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;``# function 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;` `    ``// function 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

 ``

## Javascript

 ``

Output:

`2 2 5 19`

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