# 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 <bits/stdc++.h> ` `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; ` `} ` |

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

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

*chevron_right*

*filter_none*

## PHP

`<?php ` `// PHP program to express ` `// n as sum of 4 primes. ` `$a` `= 0; ` `$b` `= 0; ` ` ` `// funcion to check if a ` `// number is prime or not ` `function` `isPrime(` `$x` `) ` `{ ` ` ` `// does square root ` `// of the number ` `$s` `= (int)(sqrt(` `$x` `)); ` ` ` `// traverse from 2 to sqrt(n) ` `for` `(` `$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; ` `} ` ` ` `function` `Num(` `$x` `) ` `{ ` `global` `$a` `; ` `global` `$b` `; ` ` ` `// iterates to check ` `// prime or not ` `for` `(` `$i` `= 2; ` ` ` `$i` `<= (int)(` `$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 ` `function` `generate(` `$n` `) ` `{ ` `global` `$a` `; ` `global` `$b` `; ` ` ` `// if n<=7 then 4 numbers cannot ` `// sum to get that number ` `if` `(` `$n` `<= 7) ` ` ` `echo` `"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. ` ` ` `echo` `"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. ` ` ` `echo` `"2 2 $a $b"` `; ` `} ` `} ` ` ` `// Driver Code ` `$n` `= 28; ` `generate(` `$n` `); ` ` ` `// This code is contributed by mits. ` `?> ` |

*chevron_right*

*filter_none*

**Output:**

2 2 5 19

**Time complexity:** O(n sqrt(n))

**Auxiliary space:** O(1)

This article is contributed by **Raja Vikramaditya** 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 write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: **DSA Self Paced**. Become industry ready at a student-friendly price.

## Recommended Posts:

- Check if a prime number can be expressed as sum of two Prime Numbers
- Elements of Array which can be expressed as power of prime numbers
- Check if a number can be expressed as a product of exactly K prime divisors
- Numbers within a range that can be expressed as power of two numbers
- Absolute difference between the Product of Non-Prime numbers and Prime numbers of an Array
- Check if a number can be expressed as a sum of consecutive numbers
- Check if a number can be expressed as sum two abundant numbers
- Check if N can be expressed as product of 3 distinct numbers
- Absolute difference between the XOR of Non-Prime numbers and Prime numbers of an Array
- Absolute Difference between the Sum of Non-Prime numbers and Prime numbers of an Array
- Check whether a number can be expressed as a product of single digit numbers
- Find ways an Integer can be expressed as sum of n-th power of unique natural numbers
- Check if a number is Prime, Semi-Prime or Composite for very large numbers
- Print the nearest prime number formed by adding prime numbers to N
- Permutation of first N positive integers such that prime numbers are at prime indices
- Permutation of first N positive integers such that prime numbers are at prime indices | Set 2
- Count all prime numbers in a given range whose sum of digits is also prime
- Print prime numbers with prime sum of digits in an array
- Print numbers such that no two consecutive numbers are co-prime and every three consecutive numbers are co-prime
- Sum of prime numbers without odd prime digits