Find two prime numbers with given sum
Last Updated :
21 Sep, 2022
Given an even number (greater than 2 ), print two prime numbers whose sum will be equal to given number. There may be several combinations possible. Print only first such pair.
An interesting point is, a solution always exist according to Goldbach’s conjecture.
Examples :
Input: n = 74
Output: 3 71
Input : n = 1024
Output: 3 1021
Input: n = 66
Output: 5 61
Input: n = 9990
Output: 17 9973
The idea is to find all the primes less than or equal to the given number N using Sieve of Eratosthenes. Once we have an array that tells all primes, we can traverse through this array to find pair with given sum.
C++
#include <bits/stdc++.h>
using namespace std;
bool SieveOfEratosthenes( int n, bool isPrime[])
{
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2; p * p <= n; p++) {
if (isPrime[p] == true ) {
for ( int i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
}
void findPrimePair( int n)
{
bool isPrime[n + 1];
SieveOfEratosthenes(n, isPrime);
for ( int i = 0; i < n; i++) {
if (isPrime[i] && isPrime[n - i]) {
cout << i << " " << (n - i);
return ;
}
}
}
int main()
{
int n = 74;
findPrimePair(n);
return 0;
}
|
C
#include <stdio.h>
#include <stdbool.h>
bool SieveOfEratosthenes( int n, bool isPrime[])
{
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2; p * p <= n; p++) {
if (isPrime[p] == true ) {
for ( int i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
}
void findPrimePair( int n)
{
bool isPrime[n + 1];
SieveOfEratosthenes(n, isPrime);
for ( int i = 0; i < n; i++) {
if (isPrime[i] && isPrime[n - i]) {
printf ( "%d %d" ,i,n-i);
return ;
}
}
}
int main()
{
int n = 74;
findPrimePair(n);
return 0;
}
|
Java
class GFG {
static boolean SieveOfEratosthenes( int n, boolean isPrime[])
{
isPrime[ 0 ] = isPrime[ 1 ] = false ;
for ( int i = 2 ; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2 ; p * p <= n; p++) {
if (isPrime[p] == true ) {
for ( int i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
return false ;
}
static void findPrimePair( int n)
{
boolean isPrime[] = new boolean [n + 1 ];
SieveOfEratosthenes(n, isPrime);
for ( int i = 0 ; i < n; i++) {
if (isPrime[i] && isPrime[n - i]) {
System.out.print(i + " " + (n - i));
return ;
}
}
}
public static void main(String[] args)
{
int n = 74 ;
findPrimePair(n);
}
}
|
Python 3
def SieveOfEratosthenes(n, isPrime):
isPrime[ 0 ] = isPrime[ 1 ] = False
for i in range ( 2 , n + 1 ):
isPrime[i] = True
p = 2
while (p * p < = n):
if (isPrime[p] = = True ):
i = p * p
while (i < = n):
isPrime[i] = False
i + = p
p + = 1
def findPrimePair(n):
isPrime = [ 0 ] * (n + 1 )
SieveOfEratosthenes(n, isPrime)
for i in range ( 0 , n):
if (isPrime[i] and isPrime[n - i]):
print (i,(n - i))
return
n = 74
findPrimePair(n)
|
C#
using System;
class GFG
{
static bool SieveOfEratosthenes( int n, bool []isPrime)
{
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2; p * p <= n; p++)
{
if (isPrime[p] == true )
{
for ( int i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
return false ;
}
static void findPrimePair( int n)
{
bool []isPrime= new bool [n + 1];
SieveOfEratosthenes(n, isPrime);
for ( int i = 0; i < n; i++)
{
if (isPrime[i] && isPrime[n - i])
{
Console.Write(i + " " + (n - i));
return ;
}
}
}
public static void Main ()
{
int n = 74;
findPrimePair(n);
}
}
|
PHP
<?php
function SieveOfEratosthenes( $n , & $isPrime )
{
$isPrime [0] = $isPrime [1] = false;
for ( $i = 2; $i <= $n ; $i ++)
$isPrime [ $i ] = true;
for ( $p = 2; $p * $p <= $n ; $p ++)
{
if ( $isPrime [ $p ] == true)
{
for ( $i = $p * $p ;
$i <= $n ; $i += $p )
$isPrime [ $i ] = false;
}
}
}
function findPrimePair( $n )
{
$isPrime = array_fill (0, $n + 1, NULL);
SieveOfEratosthenes( $n , $isPrime );
for ( $i = 0; $i < $n ; $i ++)
{
if ( $isPrime [ $i ] &&
$isPrime [ $n - $i ])
{
echo $i . " " . ( $n - $i );
return ;
}
}
}
$n = 74;
findPrimePair( $n );
?>
|
Javascript
<script>
function SieveOfEratosthenes(n,isPrime)
{
isPrime[0] = isPrime[1] = false ;
for (let i = 2; i <= n; i++)
isPrime[i] = true ;
for (let p = 2; p * p <= n; p++)
{
if (isPrime[p] == true )
{
for (let i = p * p; i <= n; i += p)
isPrime[i] = false ;
}
}
return false ;
}
function findPrimePair(n)
{
let isPrime = new Array(n+1);
for (let i=0;i<n+1;i++)
{
isPrime[i]= false ;
}
SieveOfEratosthenes(n, isPrime);
for (let i = 0; i < n; i++)
{
if (isPrime[i] && isPrime[n - i])
{
document.write(i + " " + (n - i));
return ;
}
}
}
let n = 74;
findPrimePair(n);
</script>
|
Output:
3 71
Time complexity: O(n*log(logn))
Auxiliary Space: O(n)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...