Given two numbers N and K. We need to find out if ‘N’ can be written as sum of ‘K’ prime numbers.

Given N <= 10^9

Examples:

Input : N = 10 K = 2 Output : Yes 10 can be written as 5 + 5 Input : N = 2 K = 2 Output : No

The idea is to use Goldbach’s conjecture which says that every even integer (greater than 2) can be expressed as sum of two primes.

**If the N = 2K and K = 1** : the answer will be Yes iff N is a prime number

**If N >= 2K and K = 2 **: If N is an even number answer will be Yes(Goldbach’s conjecture) and if N is odd answer will be No if N-2 is not a prime number and Yes if N-2 is a prime number. This is because we know odd + odd = even and even + odd = odd. So when N is odd, and K = 2 one number must be 2 as it is the only even prime number so now the answer depends whether N-2 is odd or not.

**If N >= 2K and K >= 3 : ** Answer will always be Yes. When N is even N – 2*(K-2) is also even so N – 2*(K – 2) can be written as sum of two prime numbers (Goldbach’s conjecture) p, q and N can be written as 2, 2 …..K – 2 times, p, q. When N is odd N – 3 -2*(K – 3) is even so it can be written as sum of two prime numbers p, q and N can be witten as 2, 2 …..K-3 times, 3, p, q

## C/C++

// C++ implementation to check if N can be // written as sum of k primes #include<bits/stdc++.h> using namespace std; // Checking if a number is prime or not bool isprime(int x) { // check for numbers from 2 to sqrt(x) // if it is divisble return false for (int i=2; i*i<=x; i++) if (x%i == 0) return false; return true; } // Returns true if N can be written as sum // of K primes bool isSumOfKprimes(int N, int K) { // N < 2K directly return false if (N < 2*K) return false; // If K = 1 return value depends on primality of N if (K == 1) return isprime(N); if (K == 2) { // if N is even directly return true; if (N%2 == 0) return true; // If N is odd, then one prime must // be 2. All other primes are odd // and cannot have a pair sum as even. return isprime(N - 2); } // If K >= 3 return true; return true; } // Driver function int main() { int n = 10, k = 2; if (isSumOfKprimes (n, k)) cout << "Yes" << endl; else cout << "No" << endl; return 0; }

## Java

// Java implementation to check if N can be // written as sum of k primes public class Prime { // Checking if a number is prime or not static boolean isprime(int x) { // check for numbers from 2 to sqrt(x) // if it is divisble return false for (int i=2; i*i<=x; i++) if (x%i == 0) return false; return true; } // Returns true if N can be written as sum // of K primes static boolean isSumOfKprimes(int N, int K) { // N < 2K directly return false if (N < 2*K) return false; // If K = 1 return value depends on primality of N if (K == 1) return isprime(N); if (K == 2) { // if N is even directly return true; if (N%2 == 0) return true; // If N is odd, then one prime must // be 2. All other primes are odd // and cannot have a pair sum as even. return isprime(N - 2); } // If K >= 3 return true; return true; } public static void main (String[] args) { int n = 10, k = 2; if (isSumOfKprimes (n, k)) System.out.print("Yes"); else System.out.print("No"); } } // Contributed by Saket Kumar

Output:

Yes

This article is contributed by **Ayush Jha** 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.