Program to find all Sexy Primes in a range (original) (raw)

Last Updated : 10 Oct, 2024

In mathematics, **Sexy Primes are prime numbers that differ from each other by six. For example, the numbers 5 and 11 are both sexy primes, because they differ by 6. If p + 2 or p + 4 (where p is the lower prime) is also prime.
They can be grouped as:

Given a range of the form **[L, R]. The task is to print all the sexy prime pairs in the range.
**Examples:

Input : L = 6, R = 59
Output : (7, 13) (11, 17) (13, 19)
(17, 23) (23, 29) (31, 37) (37, 43)
(41, 47) (47, 53) (53, 59)

Input : L = 1, R = 19
Output : (5, 11) (7, 13) (11, 17) (13, 19)

Sexy Prime within a range [L, R] can be generated using Sieve Of Eratosthenes. The idea is to generate bool array of Sieve and run a loop of i from L to R - 6 (inclusive) and check whether i and i + 6 are prime or not. If both are prime, print both number.
Below is the implementation of this approach:

Try It Yourselfredirect icon

C++ `

// CPP Program to print sexy prime in a range. #include <bits/stdc++.h> using namespace std;

// Print the sexy prime in a range void sexyprime(int l, int r) { // Sieve Of Eratosthenes for generating // prime number. bool prime[r + 1]; memset(prime, true, sizeof(prime));

for (int p = 2; p * p <= r; p++) {

    // If prime[p] is not changed, 
    // then it is a prime
    if (prime[p] == true) {

        // Update all multiples of p
        for (int i = p * 2; i <= r; i += p)
            prime[i] = false;
    }
}

// From L to R - 6, checking if i,
// i + 6 are prime or not.
for (int i = l; i <= r - 6; i++) 
    if (prime[i] && prime[i + 6])
        cout << "(" << i << ", " 
             << i + 6 << ") ";    

}

// Driven Program int main() { int L = 6, R = 59; sexyprime(L, R); return 0; }

Java

// Java code to print sexy prime in a range. import java.util.Arrays; import java.util.Collections;

class GFG { // Print the sexy prime in a range public static void sexyprime(int l, int r) { // Sieve Of Eratosthenes for generating // prime number. boolean [] prime= new boolean[r + 1];

    // memset(prime, true, sizeof(prime));
    Arrays.fill(prime, true);
    

    for (int p = 2; p * p <= r; p++)
    {
        // If prime[p] is not changed, 
        // then it is a prime
        if (prime[p] == true) 
        {
            // Update all multiples of p
            for (int i = p * 2; i <= r; i += p)
                prime[i] = false;
        }
    }

    // From L to R - 6, checking if i,
    // i + 6 are prime or not.
    for (int i = l; i <= r - 6; i++) 
        if (prime[i] && prime[i + 6])
            System.out.print( "(" + i + ", "
                    + (i + 6) + ") "); 
}

// Driver program to test above methods 
public static void main(String[] args)
{
    int L = 6, R = 59;
    sexyprime(L, R);
}

}

// This code is contributed by Chhavi

Python 3

Python 3 Program to print

sexy prime in a range.

Print the sexy prime in a range

def sexyprime(l, r) :

# Sieve Of Eratosthenes
# for generating
# prime number.
prime=[True] * (r + 1)

p = 2

while(p * p <= r) :
    
    # If prime[p] is not changed, 
    # then it is a prime
    if (prime[p] == True) :
        
        # Update all multiples of p
        for i in range( p * 2, r+1 ,p) :
               prime[i] = False
    
    p = p + 1
    
# From L to R - 6, checking if i,
# i + 6 are prime or not.
for i in range( l,r - 6 + 1) :
    
    if (prime[i] and prime[i + 6]) :
        print("(", i , ",", i + 6,")", end="")
        

Driven Program

L = 6 R = 59 sexyprime(L, R)

This code is contributed by Nikita Tiwari.

C#

// C# code to print sexy // prime in a range. using System;

class GFG { // Print the sexy // prime in a range public static void sexyprime(int l, int r) { // Sieve Of Eratosthenes // for generating prime number. int[] prime = new int[r + 1];

    // memset(prime, true,
    // sizeof(prime));
    for (int i = 0; i < r + 1; i++)
        prime[i] = 1;
    
    for (int p = 2; p * p <= r; p++)
    {
        // If prime[p] is not changed, 
        // then it is a prime
        if (prime[p] == 1) 
        {
            // Update all multiples of p
            for (int i = p * 2;
                     i <= r; i += p)
                prime[i] = 0;
        }
    }

    // From L to R - 6, checking 
    // if i, i + 6 are prime or not.
    for (int i = l; i <= r - 6; i++) 
        if (prime[i] == 1 && prime[i + 6] == 1)
            Console.Write("(" + i + ", " + 
                           (i + 6) + ") "); 
}

// Driver Code
public static void Main()
{
    int L = 6, R = 59;
    sexyprime(L, R);
}

}

// This code is contributed by mits

JavaScript

PHP

prime=arrayfill(0,prime = array_fill(0, prime=arrayfill(0,r + 1, true); for ($p = 2; p∗p * pp <= r;r; r;p++) { // If prime[p] is not // changed, then it // is a prime if ($prime[$p] == true) { // Update all // multiples of p for ($i = $p * 2; i<=i <= i<=r; i+=i += i+=p) prime[prime[prime[i] = false; } } // From L to R - 6, // checking if i, // i + 6 are prime or not. for ($i = l;l; l;i <= r−6;r - 6; r6;i++) if ($prime[$i] && prime[prime[prime[i + 6]) echo "(" , $i , ", ", $i + 6 , ") "; } // Driver Code $L = 6; $R = 59; sexyprime($L, $R); // This code is contributed // by ajit. ?>

`

**Output:

(7, 13) (11, 17) (13, 19) (17, 23)
(23, 29) (31, 37) (37, 43) (41, 47)
(47, 53) (53, 59)

**Time Complexity: O(R*log(log(R)))

**Auxiliary Space: O(R)