Open In App

Find two prime numbers with given sum

Last Updated : 21 Sep, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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++




// C++ program to find a prime number pair whose sum is
// equal to given number
// C++ program to print super primes less than or equal to n.
#include <bits/stdc++.h>
using namespace std;
  
// Generate all prime numbers less than n.
bool SieveOfEratosthenes(int n, bool isPrime[])
{
    // Initialize all entries of boolean array as true. A
    // value in isPrime[i] will finally be false if i is Not
    // a prime, else true bool isPrime[n+1];
    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] is not changed, then it is a prime
        if (isPrime[p] == true) {
            // Update all multiples of p
            for (int i = p * p; i <= n; i += p)
                isPrime[i] = false;
        }
    }
}
  
// Prints a prime pair with given sum
void findPrimePair(int n)
{
    // Generating primes using Sieve
    bool isPrime[n + 1];
    SieveOfEratosthenes(n, isPrime);
  
    // Traversing all numbers to find first pair
    for (int i = 0; i < n; i++) {
        if (isPrime[i] && isPrime[n - i]) {
            cout << i << " " << (n - i);
            return;
        }
    }
}
  
// Driven program
int main()
{
    int n = 74;
    findPrimePair(n);
    return 0;
}
  
// This code is contributed by Aditya Kumar (adityakumar129)


C




// C program to find a prime number pair whose sum is
// equal to given number
// C program to print super primes less than or equal to n.
#include <stdio.h>
#include <stdbool.h>
  
// Generate all prime numbers less than n.
bool SieveOfEratosthenes(int n, bool isPrime[])
{
    // Initialize all entries of boolean array as true. A
    // value in isPrime[i] will finally be false if i is Not
    // a prime, else true bool isPrime[n+1];
    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] is not changed, then it is a prime
        if (isPrime[p] == true) {
            // Update all multiples of p
            for (int i = p * p; i <= n; i += p)
                isPrime[i] = false;
        }
    }
}
  
// Prints a prime pair with given sum
void findPrimePair(int n)
{
    // Generating primes using Sieve
    bool isPrime[n + 1];
    SieveOfEratosthenes(n, isPrime);
  
    // Traversing all numbers to find first
    // pair
    for (int i = 0; i < n; i++) {
        if (isPrime[i] && isPrime[n - i]) {
            printf("%d  %d",i,n-i);
            return;
        }
    }
}
  
// Driven program
int main()
{
    int n = 74;
    findPrimePair(n);
    return 0;
}
  
// This code is contributed by Aditya Kumar (adityakumar129)


Java




// Java program to find a prime number pair whose sum is
// equal to given number
// Java program to print super primes less than or equal to n.
  
class GFG {
    // Generate all prime numbers less than n.
    static boolean SieveOfEratosthenes(int n, boolean isPrime[])
    {
        // Initialize all entries of boolean array as true.
        // A value in isPrime[i] will finally be false if i
        // is Not a prime, else true bool isPrime[n+1];
        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] is not changed, then it is a
            // prime
            if (isPrime[p] == true) {
                // Update all multiples of p
                for (int i = p * p; i <= n; i += p)
                    isPrime[i] = false;
            }
        }
        return false;
    }
  
    // Prints a prime pair with given sum
    static void findPrimePair(int n)
    {
        // Generating primes using Sieve
        boolean isPrime[] = new boolean[n + 1];
        SieveOfEratosthenes(n, isPrime);
  
        // Traversing all numbers to find first pair
        for (int i = 0; i < n; i++) {
            if (isPrime[i] && isPrime[n - i]) {
                System.out.print(i + " " + (n - i));
                return;
            }
        }
    }
  
    // Driver code
    public static void main(String[] args)
    {
        int n = 74;
        findPrimePair(n);
    }
}
  
// This code is contributed by Aditya Kumar (adityakumar129)


Python 3




# Python 3 program to find a prime number
# pair whose sum is equal to given number
# Python 3 program to print super primes
# less than or equal to n.
  
# Generate all prime numbers less than n.
def SieveOfEratosthenes(n, isPrime):
  
    # Initialize all entries of boolean
    # array as True. A value in isPrime[i]
    # will finally be False if i is Not a
    # prime, else True bool isPrime[n+1]
    isPrime[0] = isPrime[1] = False
    for i in range(2, n+1):
        isPrime[i] = True
  
    p = 2
    while(p*p <= n):
      
        # If isPrime[p] is not changed,
        # then it is a prime
        if (isPrime[p] == True):
          
            # Update all multiples of p
            i = p*p
            while(i <= n):
                isPrime[i] = False
                i += p
        p += 1
          
# Prints a prime pair with given sum
def findPrimePair(n):
  
    # Generating primes using Sieve
    isPrime = [0] * (n+1)
    SieveOfEratosthenes(n, isPrime)
  
    # Traversing all numbers to find 
    # first pair
    for i in range(0, n):
      
        if (isPrime[i] and isPrime[n - i]):
          
            print(i,(n - i))
            return
              
# Driven program
n = 74
findPrimePair(n)
  
# This code is contributed by 
# Smitha Dinesh Semwal


C#




// C# program to find a prime number pair whose
// sum is equal to given number
// C# program to print super primes less than
// or equal to n.
using System;
  
class GFG
{
    // Generate all prime numbers less than n.
    static bool SieveOfEratosthenes(int n, bool []isPrime)
    {
        // Initialize all entries of boolean
        // array as true. A value in isPrime[i] 
        // will finally be false if i is Not a 
        // prime, else true bool isPrime[n+1];
        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] is not changed, 
            // then it is a prime
            if (isPrime[p] == true)
            {
                // Update all multiples of p
                for (int i = p * p; i <= n; i += p)
                    isPrime[i] = false;
            }
        }
        return false;
    }
      
    // Prints a prime pair with given sum
    static void findPrimePair(int n)
    {
        // Generating primes using Sieve
        bool []isPrime=new bool[n + 1];
        SieveOfEratosthenes(n, isPrime);
      
        // Traversing all numbers to find first
        // pair
        for (int i = 0; i < n; i++)
        {
            if (isPrime[i] && isPrime[n - i])
            {
                Console.Write(i + " " + (n - i));
                return;
            }
        }
    }
      
    // Driver code 
    public static void Main ()
    {
        int n = 74;
        findPrimePair(n);
    }
}
  
// This code is contributed by vt_m.


PHP




<?php 
// PHP program to find a prime 
// number pair whose sum is equal 
// to given number
  
// Generate all prime numbers 
// less than n.
function SieveOfEratosthenes($n, &$isPrime)
{
    // Initialize all entries of 
    // boolean array as true. A value 
    // in isPrime[i] will finally
    // be false if i is Not a prime, 
    // else true bool isPrime[n+1];
    $isPrime[0] = $isPrime[1] = false;
    for ($i = 2; $i <= $n; $i++)
        $isPrime[$i] = true;
  
    for ($p = 2; $p * $p <= $n; $p++)
    {
        // If isPrime[p] is not changed, 
        // then it is a prime
        if ($isPrime[$p] == true)
        {
            // Update all multiples of p
            for ($i = $p * $p
                 $i <= $n; $i += $p)
                $isPrime[$i] = false;
        }
    }
}
  
// Prints a prime pair with given sum
function findPrimePair($n)
{
    // Generating primes using Sieve
    $isPrime = array_fill(0, $n + 1, NULL);
    SieveOfEratosthenes($n, $isPrime);
  
    // Traversing all numbers 
    // to find first pair
    for ($i = 0; $i < $n; $i++)
    {
        if ($isPrime[$i] && 
            $isPrime[$n - $i])
        {
            echo $i . " " . ($n - $i);
            return;
        }
    }
}
  
// Driver Code
$n = 74;
findPrimePair($n);
  
// This code is contributed
// by ChitraNayal
?>


Javascript




<script>
  
// Javascript program to find a prime number pair whose
// sum is equal to given number
// Java program to print super primes less than
// or equal to n.
  
    // Generate all prime numbers less than n.
    function SieveOfEratosthenes(n,isPrime)
    {
        // Initialize all entries of boolean
        // array as true. A value in isPrime[i] 
        // will finally be false if i is Not a 
        // prime, else true bool isPrime[n+1];
        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] is not changed, 
            // then it is a prime
            if (isPrime[p] == true)
            {
                // Update all multiples of p
                for (let i = p * p; i <= n; i += p)
                    isPrime[i] = false;
            }
        }
        return false;
    }
      
    // Prints a prime pair with given sum
    function findPrimePair(n)
    {
        // Generating primes using Sieve
        let isPrime = new Array(n+1);
        for(let i=0;i<n+1;i++)
        {
            isPrime[i]=false;
        }
        SieveOfEratosthenes(n, isPrime);
        
        // Traversing all numbers to find first
        // pair
        for (let i = 0; i < n; i++)
        {
            if (isPrime[i] && isPrime[n - i])
            {
                document.write(i + " " + (n - i));
                return;
            }
        }
    }
      
    // Driver code
    let  n = 74;
    findPrimePair(n);
      
    // This code is contributed by rag2127
      
</script>


Output: 
 

3 71

Time complexity: O(n*log(logn))

Auxiliary Space: O(n)

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads