GFG App
Open App
Browser
Continue

# Check if a prime number can be expressed as sum of two Prime Numbers

Given a prime number N. The task is to check if it is possible to express N as the sum of two separate prime numbers.
Note: The range of N is less than 108.

Examples:

```Input: N = 13
Output: Yes
Explanation: The number 13 can be written as 11 + 2,
here 11 and 2 are both prime.

Input: N = 11
Output: No```

Simple Solution: A simple solution is to create a sieve to store all the prime numbers less than the number N. Then run a loop from 1 to N and check whether i and n-i are both prime or not. If yes then print Yes, else No.

Time Complexity: O(n)
Space Complexity: O(n)

Efficient solution: Apart from 2, all of the prime numbers are odd. So it is not possible to represent a prime number (which is odd) to be written as a sum of two odd prime numbers, so we are sure that one of the two prime numbers should be 2. So we have to check whether n-2 is prime or not. If it holds we print Yes else No.
For example, if the number is 19 then we have to check whether 19-2 = 17 is a prime number or not. If 17 is a prime number then print yes otherwise print no.

Algorithm:

•  Create a static function with a boolean return type that takes an integer element as input.
•  Check if n is less than or equal to 1. If yes, return false as 1 and any number less than 1 is not considered prime.
•  now start for loop from i=2 to the square root of n and Check if n is divisible by i. If yes, return false as n is not a prime number.
• and if there is no n which is divided by I then we came out of the loop and return true
• Step 3: Create a static function names impossible of boolean return type which takes an integer value as input
• Check if N and N-2 are prime numbers by calling the “isPrime” function. If yes, return true. Otherwise, return false.

Below is the implementation of the above approach:

## C

 `// C program to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers` `#include ` `#include ` `#include `   `// Function to check whether a number` `// is prime or not` `bool` `isPrime(``int` `n)` `{` `    ``if` `(n <= 1)` `        ``return` `false``;`   `    ``for` `(``int` `i = 2; i <= ``sqrt``(n); i++) ` `    ``{` `        ``if` `(n % i == 0)` `            ``return` `false``;` `    ``}`   `    ``return` `true``;` `}`   `// Function to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers` `bool` `isPossible(``int` `N)` `{` `    ``// if the number is prime,` `    ``// and number-2 is also prime` `    ``if` `(isPrime(N) && isPrime(N - 2))` `        ``return` `true``;` `    ``else` `        ``return` `false``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `n = 13;`   `    ``if` `(isPossible(n))` `        ``printf``(``"%s"``, ``"Yes"``);` `    ``else` `        ``printf``(``"%s"``, ``"No"``);`   `    ``return` `0;` `}`

## C++

 `// C++ program to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers` `#include ` `using` `namespace` `std;`   `// Function to check whether a number` `// is prime or not` `bool` `isPrime(``int` `n)` `{` `    ``if` `(n <= 1)` `        ``return` `false``;`   `    ``for` `(``int` `i = 2; i <= ``sqrt``(n); i++) {` `        ``if` `(n % i == 0)` `            ``return` `false``;` `    ``}`   `    ``return` `true``;` `}`   `// Function to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers` `bool` `isPossible(``int` `N)` `{` `    ``// if the number is prime,` `    ``// and number-2 is also prime` `    ``if` `(isPrime(N) && isPrime(N - 2))` `        ``return` `true``;` `    ``else` `        ``return` `false``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `n = 13;`   `    ``if` `(isPossible(n))` `        ``cout << ``"Yes"``;` `    ``else` `        ``cout << ``"No"``;`   `    ``return` `0;` `}`

## Java

 `// Java program to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers`   `public` `class` `GFG{` `    `  `    ``// Function to check whether a number` `    ``// is prime or not` `    ``static` `boolean` `isPrime(``int` `n)` `    ``{` `        ``if` `(n <= ``1``)` `            ``return` `false``;` `    `  `        ``for` `(``int` `i = ``2``; i <= Math.sqrt(n); i++) {` `            ``if` `(n % i == ``0``)` `                ``return` `false``;` `        ``}` `    `  `        ``return` `true``;` `    ``}` `    `  `    ``// Function to check if a prime number` `    ``// can be expressed as sum of` `    ``// two Prime Numbers` `    ``static` `boolean` `isPossible(``int` `N)` `    ``{` `        ``// if the number is prime,` `        ``// and number-2 is also prime` `        ``if` `(isPrime(N) && isPrime(N - ``2``))` `            ``return` `true``;` `        ``else` `            ``return` `false``;` `    ``}` `    `  `     ``// Driver code` `     ``public` `static` `void` `main(String []args){` `         `  `        ``int` `n = ``13``;` `    `  `        ``if` `(isPossible(n) == ``true``)` `            ``System.out.println(``"Yes"``);` `        ``else` `            ``System.out.println(``"No"``);` `     ``}` `     ``// This code is contributed by ANKITRAI1` `}`

## Python3

 `# Python3 program to check if a prime ` `# number can be expressed as sum of ` `# two Prime Numbers ` `import` `math`   `# Function to check whether a number ` `# is prime or not ` `def` `isPrime(n):` `    ``if` `n <``=` `1``:` `        ``return` `False` `    `  `    ``if` `n ``=``=` `2``:` `        ``return` `True` `        `  `    ``if` `n``%``2` `=``=` `0``:` `        ``return` `False` `        `  `    ``for` `i ``in` `range``(``3``, ``int``(math.sqrt(n))``+``1``, ``2``):` `        ``if` `n``%``i ``=``=` `0``:` `            ``return` `False` `    ``return` `True`   `# Function to check if a prime number ` `# can be expressed as sum of ` `# two Prime Numbers ` `def` `isPossible(n):`   `    ``# if the number is prime, ` `    ``# and number-2 is also prime ` `    ``if` `isPrime(n) ``and` `isPrime(n ``-` `2``):` `        ``return` `True` `    ``else``:` `        ``return` `False`   `# Driver code` `n ``=` `13` `if` `isPossible(n) ``=``=` `True``:` `    ``print``(``"Yes"``)` `else``:` `    ``print``(``"No"``)` `    `  `# This code is contributed by Shrikant13`

## C#

 `// C# program to check if a prime ` `// number can be expressed as sum ` `// of two Prime Numbers` `using` `System;`   `class` `GFG` `{`   `// Function to check whether a ` `// number is prime or not` `static` `bool` `isPrime(``int` `n)` `{` `    ``if` `(n <= 1)` `        ``return` `false``;`   `    ``for` `(``int` `i = 2; ` `             ``i <= Math.Sqrt(n); i++) ` `    ``{` `        ``if` `(n % i == 0)` `            ``return` `false``;` `    ``}`   `    ``return` `true``;` `}`   `// Function to check if a prime ` `// number can be expressed as sum ` `// of two Prime Numbers` `static` `bool` `isPossible(``int` `N)` `{` `    ``// if the number is prime,` `    ``// and number-2 is also prime` `    ``if` `(isPrime(N) && isPrime(N - 2))` `        ``return` `true``;` `    ``else` `        ``return` `false``;` `}`   `// Driver code` `public` `static` `void` `Main()` `{` `    ``int` `n = 13;`   `    ``if` `(isPossible(n) == ``true``)` `        ``Console.Write(``"Yes"``);` `    ``else` `        ``Console.Write(``"No"``);` `}` `}`   `// This code is contributed ` `// by ChitraNayal`

## PHP

 ``

## Javascript

 `// JavaScript program to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers`   `// Function to check whether a number` `// is prime or not` `function` `isPrime(n) {` `    ``if` `(n <= 1)` `        ``return` `false``;` `    ``for` `(let i = 2; i <= Math.sqrt(n); i++) {` `        ``if` `(n % i == 0)` `            ``return` `false``;` `    ``}`   `    ``return` `true``;` `}`   `// Function to check if a prime number` `// can be expressed as sum of` `// two Prime Numbers` `function` `isPossible(N) {` `    ``// if the number is prime,` `    ``// and number-2 is also prime` `    ``if` `(isPrime(N) && isPrime(N - 2))` `        ``return` `true``;` `    ``else` `        ``return` `false``;` `}`   `// Driver code` `let n = 13;`   `if` `(isPossible(n))` `    ``console.log(``"Yes"``);` `else` `    ``console.log(``"No"``);` `    ``//This code is contributed by sarojmcy2e`

Output:

`Yes`

Time Complexity: O(sqrt(n))
Auxiliary Space: O(1)

Approach 2:

Here’s another approach to check if a prime number can be expressed as the sum of two prime numbers:

• First, generate all prime numbers up to the given number. This can be done using the Sieve of Eratosthenes algorithm.
• Then, iterate through each prime number and check if the difference between the given number and the current prime number is also a prime number.
• If both the current prime number and the difference are prime, then the given number can be expressed as the sum of two prime numbers.

Here’s the updated C++ code:

## C++

 `#include ` `using` `namespace` `std;`   `// Function to generate all prime numbers up to n` `vector<``int``> generatePrimes(``int` `n) {` `    ``vector<``bool``> isPrime(n + 1, ``true``);` `    ``vector<``int``> primes;` `    ``for` `(``int` `i = 2; i <= n; i++) {` `        ``if` `(isPrime[i]) {` `            ``primes.push_back(i);` `            ``for` `(``int` `j = i * i; j <= n; j += i) {` `                ``isPrime[j] = ``false``;` `            ``}` `        ``}` `    ``}` `    ``return` `primes;` `}`   `// Function to check if a prime number can be expressed as the sum of two prime numbers` `bool` `isPossible(``int` `n) {` `    ``vector<``int``> primes = generatePrimes(n);` `    ``for` `(``int` `i = 0; i < primes.size(); i++) {` `        ``int` `diff = n - primes[i];` `        ``if` `(diff < 2) {` `            ``break``;` `        ``}` `        ``bool` `isDiffPrime = ``true``;` `        ``for` `(``int` `j = 2; j <= ``sqrt``(diff); j++) {` `            ``if` `(diff % j == 0) {` `                ``isDiffPrime = ``false``;` `                ``break``;` `            ``}` `        ``}` `        ``if` `(isDiffPrime) {` `            ``return` `true``;` `        ``}` `    ``}` `    ``return` `false``;` `}`   `// Driver code` `int` `main() {` `    ``int` `n = 13;` `    ``if` `(isPossible(n)) {` `        ``cout << ``"Yes"``;` `    ``} ``else` `{` `        ``cout << ``"No"``;` `    ``}` `    ``return` `0;` `}`

## Java

 `import` `java.util.ArrayList;`   `public` `class` `Main {`   `    ``// Function to generate all prime numbers up to n` `    ``public` `static` `ArrayList generatePrimes(``int` `n) {` `        ``boolean``[] isPrime = ``new` `boolean``[n + ``1``];` `        ``ArrayList primes = ``new` `ArrayList<>();` `        ``for` `(``int` `i = ``2``; i <= n; i++) {` `            ``isPrime[i] = ``true``;` `        ``}`   `        ``for` `(``int` `i = ``2``; i * i <= n; i++) {` `            ``if` `(isPrime[i]) {` `                ``for` `(``int` `j = i * i; j <= n; j += i) {` `                    ``isPrime[j] = ``false``;` `                ``}` `            ``}` `        ``}`   `        ``for` `(``int` `i = ``2``; i <= n; i++) {` `            ``if` `(isPrime[i]) {` `                ``primes.add(i);` `            ``}` `        ``}`   `        ``return` `primes;` `    ``}`   `    ``// Function to check if a prime number can be expressed as the sum of two prime numbers` `    ``public` `static` `boolean` `isPossible(``int` `n) {` `        ``ArrayList primes = generatePrimes(n);` `        ``for` `(``int` `i = ``0``; i < primes.size(); i++) {` `            ``int` `diff = n - primes.get(i);` `            ``if` `(diff < ``2``) {` `                ``break``;` `            ``}` `            ``boolean` `isDiffPrime = ``true``;` `            ``for` `(``int` `j = ``2``; j <= Math.sqrt(diff); j++) {` `                ``if` `(diff % j == ``0``) {` `                    ``isDiffPrime = ``false``;` `                    ``break``;` `                ``}` `            ``}` `            ``if` `(isDiffPrime) {` `                ``return` `true``;` `            ``}` `        ``}` `        ``return` `false``;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args) {` `        ``int` `n = ``13``;` `        ``if` `(isPossible(n)) {` `            ``System.out.println(``"Yes"``);` `        ``} ``else` `{` `            ``System.out.println(``"No"``);` `        ``}` `    ``}` `}`

## C#

 `using` `System;` `using` `System.Collections.Generic;`   `public` `class` `Program {` `    ``// Function to generate all prime numbers up to n` `    ``static` `List<``int``> GeneratePrimes(``int` `n) {` `        ``bool``[] isPrime = ``new` `bool``[n + 1];` `        ``List<``int``> primes = ``new` `List<``int``>();` `        ``for` `(``int` `i = 2; i <= n; i++) {` `            ``isPrime[i] = ``true``;` `        ``}` `        ``for` `(``int` `i = 2; i <= n; i++) {` `            ``if` `(isPrime[i]) {` `                ``primes.Add(i);` `                ``for` `(``int` `j = i * i; j <= n; j += i) {` `                    ``isPrime[j] = ``false``;` `                ``}` `            ``}` `        ``}` `        ``return` `primes;` `    ``}`   `    ``// Function to check if a prime number can be expressed as the sum of two prime numbers` `    ``static` `bool` `IsPossible(``int` `n) {` `        ``List<``int``> primes = GeneratePrimes(n);` `        ``for` `(``int` `i = 0; i < primes.Count; i++) {` `            ``int` `diff = n - primes[i];` `            ``if` `(diff < 2) {` `                ``break``;` `            ``}` `            ``bool` `isDiffPrime = ``true``;` `            ``for` `(``int` `j = 2; j <= Math.Sqrt(diff); j++) {` `                ``if` `(diff % j == 0) {` `                    ``isDiffPrime = ``false``;` `                    ``break``;` `                ``}` `            ``}` `            ``if` `(isDiffPrime) {` `                ``return` `true``;` `            ``}` `        ``}` `        ``return` `false``;` `    ``}`   `    ``// Driver code` `    ``static` `void` `Main(``string``[] args) {` `        ``int` `n = 13;` `        ``if` `(IsPossible(n)) {` `            ``Console.WriteLine(``"Yes"``);` `        ``} ``else` `{` `            ``Console.WriteLine(``"No"``);` `        ``}` `    ``}` `}`

Output:

`Yes`

Time Complexity: O(sqrt(n))
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up