N expressed as sum of 4 prime numbers

06 Sep, 2021
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++
Java
Python3
C#
PHP
Javascript
// CPP program to express n as sum of 4 primes.#include <bits/stdc++.h>using namespace std; // function to check if a number is prime or notint 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 nvoid 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 functionint main(){    int n = 28;    generate(n);    return 0;}
// 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 program to express# n as sum of 4 primes.import math;# function to check if a# number is prime or notdef 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 ndef 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 Codeif __name__=='__main__':    n = 28    generate(n) # This code is contributed by mits.
// 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// PHP program to express// n as sum of 4 primes.$a = 0;$b = 0; // function to check if a// number is prime or notfunction 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 primeif ($x % $i == 0)return 0; // if no divisor is found// then it is a primereturn 1;} function Num($x){global $a;global $b; // iterates to check// prime or notfor ($i = 2;     $i <= (int)($x / 2); $i++){ // calls function to check// if i and x-i is prime// or notif (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 nfunction generate($n){global $a;global $b; // if n<=7 then 4 numbers cannot// sum to get that numberif ($n <= 7)    echo "Impossible to form"; // if it is not even then 2 and// 3 are first two of sequenceif ($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 sequenceelse{    // 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.?>
<script>// JavaScript program to express n as sum of// 4 primes.     let a = 0, b = 0;       // function to check if a number    // is prime or not    function isPrime(x)    {           // does square root of the        // number        let s = Math.sqrt(x);           // traverse from 2 to sqrt(n)        for (let 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)    {           // iterates to check prime        // or not        for (let 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    function generate(n)    {           // if n<=7 then 4 numbers cannot        // sum to get that number        if (n <= 7)            document.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.            document.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.            document.write("2 2 " + a + " " + b);        }    }   // Driver Code     let n = 28;       generate(n);                 </script>
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 write.geeksforgeeks.org or mail your article to review-team@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. 
nitin mittal
Mithun Kumar
nidhi_biet
code_hunt
kalrap615
khushboogoyal499
number-theory
Numbers
Prime Number
Mathematical
number-theory
Mathematical
Prime Number
Numbers
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.