Count distinct prime triplets up to N such that sum of two primes is equal to the third prime

• Difficulty Level : Hard
• Last Updated : 15 Nov, 2021

Given an integer N, the task is to count the number of distinct prime triplets (a, b, c) from the range [1, N] such that a < b < c ≤ N and a + b = c.
Note: Two prime tuples are distinct if at least one of the primes present in them are different.

Examples:

Input: N = 6
Output: 1
Explanation: Among numbers in the range [1, 6], the only prime triplet is (2, 3, 5) (Since 2 + 3 = 5).

Input: N = 10
Output: 2
Explanation: The distinct prime triplets satisfying the condition are (2, 3, 5), (2, 5, 7).

Approach: The problem can be solved based on the observation stated below:

Observation:

For every prime number p from 1 to N, it is a part of a triplet if and only if it can be represented as a sum of two prime numbers
Since a prime number is an odd number, it must be equal to the sum of an even number and an odd number.
Hence the only even prime is 2. Therefore, for a prime number p to constitute a unique tuple (2, p-2, p), the number p – 2 must be a prime number.

Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++

 // C++ program for the above approach #include using namespace std; // Function to check if a// number is a prime or notbool 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 count the number// of valid prime tripletsvoid countPrimeTuples(int N){    // Stores the count    // of prime triplets    int count = 0;     // Iterate from 2 to N and check for each    // p, whether p & (p - 2) are prime or not    for (int i = 2; i <= N; i++) {         if (isPrime(i) && isPrime(i - 2))            count++;    }     // Print the count obtained    cout << count;} // Driver Codeint main(){    int N = 6;    countPrimeTuples(N);     return 0;}

Java

 // Java program for the above approachimport java.io.*;class GFG{     // Function to check if a  // number is a 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 count the number  // of valid prime triplets  static void countPrimeTuples(int N)  {           // Stores the count      // of prime triplets      int count = 0;       // Iterate from 2 to N and check for each      // p, whether p & (p - 2) are prime or not      for (int i = 2; i <= N; i++)      {          if (isPrime(i) && isPrime(i - 2))              count++;      }       // Print the count obtained      System.out.println(count);  }   // Driver Code  public static void main (String[] args)  {     int N = 6;    countPrimeTuples(N);  }} // This code is contributed by Dharanendra L V.

Python3

 # Python3 program for the above approachimport math # Function to check if a# number is a prime or notdef isPrime(N) :    if (N <= 1) :        return False    for i in range(2, int(math.sqrt(N) + 1)):        if (N % i == 0) :            return False    return True # Function to count the number# of valid prime tripletsdef countPrimeTuples(N) :         # Stores the count    # of prime triplets    count = 0     # Iterate from 2 to N and check for each    # p, whether p & (p - 2) are prime or not    for i in range(2, N + 1):         if (isPrime(i) and isPrime(i - 2)) :            count += 1         # Print count obtained    print(count) # Driver CodeN = 6countPrimeTuples(N) # This code is contributed by susmitakundugoaldanga.

C#

 // C# program for the above approachusing System;public class GFG{       // Function to check if a  // number is a 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 count the number  // of valid prime triplets  static void countPrimeTuples(int N)  {           // Stores the count      // of prime triplets      int count = 0;       // Iterate from 2 to N and check for each      // p, whether p & (p - 2) are prime or not      for (int i = 2; i <= N; i++)      {          if (isPrime(i) && isPrime(i - 2))              count++;      }       // Print the count obtained      Console.WriteLine(count);  }   // Driver Code  static public void Main ()  {    int N = 6;    countPrimeTuples(N);  }} // This code is contributed by Dharanendra L V.

Javascript


Output:
1

Time Complexity: O(N3/2)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up