Prime Triplet
Last Updated :
31 Aug, 2022
Prime Triplet is a set of three prime numbers of the form (p, p+2, p+6) or (p, p+4, p+6). This is the closest possible grouping of three prime numbers, since one of every three sequential odd numbers is a multiple of three, and hence not prime (except for 3 itself) except (2, 3, 5) and (3, 5, 7).
Examples :
Input : n = 15
Output : 5 7 11
7 11 13
Input : n = 25
Output : 5 7 11
7 11 13
11 13 17
13 17 19
17 19 23
A simple solution is to traverse through all numbers from 1 to n-6. For every number, i check if i, i+2, i+6, or i, i+4, i+6 are primes. If yes, print triplets.
An efficient solution is Sieve of Eratosthenes to first find all prime numbers so that we can quickly check if a number is prime or not.
Below is the implementation of the approach.
C++
#include <bits/stdc++.h>
using namespace std;
void sieve( int n, bool prime[])
{
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
}
void printPrimeTriplets( int n)
{
bool prime[n + 1];
memset (prime, true , sizeof (prime));
sieve(n, prime);
cout << "The prime triplets from 1 to "
<< n << "are :" << endl;
for ( int i = 2; i <= n-6; ++i) {
if (prime[i] && prime[i + 2] && prime[i + 6])
cout << i << " " << (i + 2) << " " << (i + 6) << endl;
else if (prime[i] && prime[i + 4] && prime[i + 6])
cout << i << " " << (i + 4) << " " << (i + 6) << endl;
}
}
int main()
{
int n = 25;
printPrimeTriplets(n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
static void sieve( int n, boolean prime[])
{
for ( int p = 2 ; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * 2 ; i <= n; i += p)
prime[i] = false ;
}
}
}
static void printPrimeTriplets( int n)
{
boolean prime[]= new boolean [n + 1 ];
Arrays.fill(prime, true );
sieve(n, prime);
System.out.println( "The prime triplets" +
" from 1 to " + n + "are :" );
for ( int i = 2 ; i <= n- 6 ; ++i) {
if (prime[i] && prime[i + 2 ] && prime[i + 6 ])
System.out.println( i + " " + (i + 2 ) +
" " + (i + 6 ));
else if (prime[i] && prime[i + 4 ] &&
prime[i + 6 ])
System.out.println(i + " " + (i + 4 ) +
" " + (i + 6 ));
}
}
public static void main(String args[])
{
int n = 25 ;
printPrimeTriplets(n);
}
}
|
Python3
def sieve(n, prime) :
p = 2
while (p * p < = n ) :
if (prime[p] = = True ) :
i = p * 2
while ( i < = n ) :
prime[i] = False
i = i + p
p = p + 1
def printPrimeTriplets(n) :
prime = [ True ] * (n + 1 )
sieve(n, prime)
print ( "The prime triplets from 1 to " ,
n , "are :" )
for i in range ( 2 , n - 6 + 1 ) :
if (prime[i] and prime[i + 2 ] and
prime[i + 6 ]) :
print ( i , (i + 2 ) , (i + 6 ))
elif (prime[i] and prime[i + 4 ] and
prime[i + 6 ]) :
print (i , (i + 4 ) , (i + 6 ))
n = 25
printPrimeTriplets(n)
|
C#
using System;
class GFG
{
static void sieve( int n,
bool [] prime)
{
for ( int p = 2;
p * p <= n; p++)
{
if (prime[p] == false )
{
for ( int i = p * 2;
i <= n; i += p)
prime[i] = true ;
}
}
}
static void printPrimeTriplets( int n)
{
bool [] prime = new bool [n + 1];
sieve(n, prime);
Console.WriteLine( "The prime triplets " +
"from 1 to " +
n + " are :" );
for ( int i = 2; i <= n - 6; ++i)
{
if (!prime[i] &&
!prime[i + 2] &&
!prime[i + 6])
Console.WriteLine(i + " " + (i + 2) +
" " + (i + 6));
else if (!prime[i] &&
!prime[i + 4] &&
!prime[i + 6])
Console.WriteLine(i + " " + (i + 4) +
" " + (i + 6));
}
}
public static void Main()
{
int n = 25;
printPrimeTriplets(n);
}
}
|
PHP
<?php
function printPrimeTriplets( $n )
{
$prime = array_fill (0, $n + 1, true);
for ( $p = 2; $p * $p <= $n ; $p ++)
{
if ( $prime [ $p ] == true)
{
for ( $i = $p * 2; $i <= $n ; $i += $p )
$prime [ $i ] = false;
}
}
echo "The prime triplets from 1 to " .
$n . " are :\n" ;
for ( $i = 2; $i <= $n -6; ++ $i )
{
if ( $prime [ $i ] && $prime [ $i + 2] &&
$prime [ $i + 6])
echo $i . " " . ( $i + 2) .
" " . ( $i + 6) . "\n" ;
else if ( $prime [ $i ] && $prime [ $i + 4] &&
$prime [ $i + 6])
echo $i . " " . ( $i + 4) .
" " . ( $i + 6) . "\n" ;
}
}
$n = 25;
printPrimeTriplets( $n );
?>
|
Javascript
<script>
function printPrimeTriplets(n)
{
let prime = new Array(n + 1).fill( true );
for (let p = 2; p * p <= n; p++)
{
if (prime[p] == true )
{
for (let i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
document.write( "The prime triplets from 1 to " + n + " are :<br>" );
for (let i = 2; i <= n-6; ++i)
{
if (prime[i] && prime[i + 2] &&
prime[i + 6])
document.write(i + " " + (i + 2) +
" " + (i + 6) + "<br>" );
else if (prime[i] && prime[i + 4] &&
prime[i + 6])
document.write(i + " " + (i + 4) +
" " + (i + 6) + "<br>" );
}
}
let n = 25;
printPrimeTriplets(n);
</script>
|
Output :
The prime triplets from 1 to 25 are :
5 7 11
7 11 13
11 13 17
13 17 19
17 19 23
Time Complexity: O(n*log(log(n)))
Auxiliary Space: O(n)
Share your thoughts in the comments
Please Login to comment...