Find three prime numbers with given sum
Last Updated :
06 Sep, 2022
Given an integer N, the task is to find three prime numbers X, Y, and Z such that the sum of these three numbers is equal to N i.e. X + Y + Z = N.
Examples:
Input: N = 20
Output: 2 5 13
Input: N = 34
Output: 2 3 29
Approach:
- Generate prime numbers using Sieve of Eratosthenes
- Start from the first prime number.
- Take another number from the generated list.
- Subtract first number and second number from the original number to obtain the third number.
- Check if the third number is a prime number.
- If the third number is a prime number then output the three numbers.
- Otherwise, repeat the process for the second number and consequently the first number
- If the answer does not exist then print -1.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100001;
vector< int > primes;
void initialize()
{
bool numbers[MAX] = {};
int n = MAX;
for ( int i = 2; i * i <= n; i++)
if (!numbers[i])
for ( int j = i * i; j <= n; j += i)
numbers[j] = true ;
for ( int i = 2; i <= n; i++)
if (numbers[i] == false )
primes.push_back(i);
}
void findNums( int num)
{
bool ans = false ;
int first = -1, second = -1, third = -1;
for ( int i = 0; i < num; i++) {
first = primes[i];
for ( int j = 0; j < num; j++) {
second = primes[j];
third = num - first - second;
if (binary_search(primes.begin(),
primes.end(), third)) {
ans = true ;
break ;
}
}
if (ans)
break ;
}
if (ans)
cout << first << " "
<< second << " " << third << endl;
else
cout << -1 << endl;
}
int main()
{
int n = 101;
initialize();
findNums(n);
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
import java.io.*;
class GFG{
static int MAX = 100001 ;
static ArrayList<Integer> primes;
static void initialize()
{
boolean [] numbers = new boolean [MAX + 1 ];
int n = MAX;
for ( int i = 2 ; i * i <= n; i++)
if (!numbers[i])
for ( int j = i * i; j <= n; j += i)
numbers[j] = true ;
for ( int i = 2 ; i <= n; i++)
if (numbers[i] == false )
primes.add(i);
}
static void findNums( int num)
{
boolean ans = false ;
int first = - 1 , second = - 1 , third = - 1 ;
for ( int i = 0 ; i < num; i++)
{
first = primes.get(i);
for ( int j = 0 ; j < num; j++)
{
second = primes.get(j);
third = num - first - second;
if (Collections.binarySearch(
primes, third) >= 0 )
{
ans = true ;
break ;
}
}
if (ans)
break ;
}
if (ans)
System.out.println(first + " " +
second + " " +
third);
else
System.out.println(- 1 );
}
public static void main (String[] args)
{
int n = 101 ;
primes = new ArrayList<>();
initialize();
findNums(n);
}
}
|
Python3
from math import sqrt
MAX = 100001 ;
primes = [];
def initialize() :
numbers = [ 0 ] * ( MAX + 1 );
n = MAX ;
for i in range ( 2 , int (sqrt(n)) + 1 ) :
if ( not numbers[i]) :
for j in range ( i * i , n + 1 , i) :
numbers[j] = True ;
for i in range ( 2 , n + 1 ) :
if (numbers[i] = = False ) :
primes.append(i);
def findNums(num) :
ans = False ;
first = - 1 ;
second = - 1 ;
third = - 1 ;
for i in range (num) :
first = primes[i];
for j in range (num) :
second = primes[j];
third = num - first - second;
if (third in primes) :
ans = True ;
break ;
if (ans) :
break ;
if (ans) :
print (first , second , third);
else :
print ( - 1 );
if __name__ = = "__main__" :
n = 101 ;
initialize();
findNums(n);
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static int MAX = 100001;
static List< int > primes = new List< int >();
static void initialize()
{
bool [] numbers = new bool [MAX + 1];
int n = MAX;
for ( int i = 2; i * i <= n; i++)
if (!numbers[i])
for ( int j = i * i; j <= n; j += i)
numbers[j] = true ;
for ( int i = 2; i <= n; i++)
if (numbers[i] == false )
primes.Add(i);
}
static void findNums( int num)
{
bool ans = false ;
int first = -1, second = -1, third = -1;
for ( int i = 0; i < num; i++)
{
first = primes[i];
for ( int j = 0; j < num; j++)
{
second = primes[j];
third = num - first - second;
if (Array.BinarySearch(primes.ToArray(), third) >= 0)
{
ans = true ;
break ;
}
}
if (ans)
break ;
}
if (ans)
Console.WriteLine(first + " " + second + " " + third);
else
Console.WriteLine(-1);
}
static void Main()
{
int n = 101;
initialize();
findNums(n);
}
}
|
Javascript
let MAX = 100001;
let primes = [];
function initialize()
{
let numbers = new Array(MAX + 1).fill(0);
let n = MAX;
for ( var i = 2; i < Math.sqrt(n); i++)
{
if (!numbers[i])
{
for ( var j = i * i; j < n + 1; j += i)
{
numbers[j] = true ;
}
}
}
for ( var i = 2; i <= n; i++)
if (numbers[i] == false )
primes.push(i);
}
function findNums(num)
{
let ans = false ;
let first = -1;
let second = -1;
let third = -1;
for ( var i = 0; i < num; i++)
{
first = primes[i];
for ( var j = 0; j < num; i++)
{
second = primes[j];
third = num - first - second;
if (primes.includes(third))
{
ans = true ;
break ;
}
}
if (ans)
break ;
}
if (ans)
console.log(first , second , third);
else
console.log(-1);
}
let n = 101;
initialize();
findNums(n);
|
Share your thoughts in the comments
Please Login to comment...