Skip to content
Related Articles

Related Articles

Special prime numbers
  • Difficulty Level : Medium
  • Last Updated : 02 Jan, 2019

Given two numbers n and k, find whether there exist at least k Special prime numbers or not from 2 to n inclusively.
A prime number is said to be Special prime number if it can be expressed as the sum of three integer numbers: two neighboring prime numbers and 1. For example, 19 = 7 + 11 + 1, or 13 = 5 + 7 + 1.
Note:- Two prime numbers are called neighboring if there are no other prime numbers between them.
Examples:

Input : n = 27, k = 2
Output : YES
In this sample the answer is YES 
since at least two numbers are 
Special 13(5 + 7 + 1) and
19(7 + 11 + 1).

Input : n = 45, k = 7
Output : NO
In this example, the Special 
prime numbers are 13(5 + 7 + 1), 
19(7 + 11 + 1), 31(13 + 17 + 1),
37(17 + 19 + 1), 43(19 + 23 + 1).
As the no. of Special prime 
numbers from 2 to 45 is less than
k, the output is NO.

To solve this problem we need to find prime numbers in range [2..n]. So we us Sieve of Eratosthenes to generate all the prime numbers from 2 to n. Then, Take every pair of neighboring prime numbers and check if their sum increased by 1 is a prime number too. Count the number of these pairs, compare it to K and output the result.
Below is the implementation of the above approach:-

C++




// CPP program to check whether there
// exist at least k or not in range [2..n]
#include <bits/stdc++.h>
using namespace std;
  
vector<int> primes;
  
// Generating all the prime numbers
// from 2 to n.
void SieveofEratosthenes(int n)
{
    bool visited[n];
    for (int i = 2; i <= n + 1; i++)
        if (!visited[i]) {
            for (int j = i * i; j <= n + 1; j += i)
                visited[j] = true;
            primes.push_back(i);
        }
}
  
bool specialPrimeNumbers(int n, int k)
{
    SieveofEratosthenes(n);
    int count = 0;
    for (int i = 0; i < primes.size(); i++) {
        for (int j = 0; j < i - 1; j++) {
  
            // If a prime number is Special prime
            // number, then we increments the
            // value of k.
            if (primes[j] + primes[j + 1] + 1
                == primes[i]) {
                count++;
                break;
            }
        }
  
        // If at least k Special prime numbers
        // are present, then we return 1.
        // else we return 0 from outside of
        // the outer loop.
        if (count == k)
            return true;
    }
    return false;
}
  
// Driver function
int main()
{
    int n = 27, k = 2;
    if (specialPrimeNumbers(n, k))
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    return 0;
}


Java




// Java program to check whether there
// exist at least k or not in range [2..n]
import java.util.*; 
class GFG{
static ArrayList<Integer> primes = new ArrayList<Integer>();
// Generating all the prime numbers
// from 2 to n.
static void SieveofEratosthenes(int n)
{
    boolean[] visited=new boolean[n*n+2];
    for (int i = 2; i <= n + 1; i++)
        if (!visited[i]) {
            for (int j = i * i; j <= n + 1; j += i)
                visited[j] = true;
            primes.add(i);
        }
}
  
static boolean specialPrimeNumbers(int n, int k)
{
    SieveofEratosthenes(n);
    int count = 0;
    for (int i = 0; i < primes.size(); i++) {
        for (int j = 0; j < i - 1; j++) {
  
            // If a prime number is Special prime
            // number, then we increments the
            // value of k.
            if (primes.get(j) + primes.get(j + 1) + 1
                == primes.get(i)) {
                count++;
                break;
            }
        }
  
        // If at least k Special prime numbers
        // are present, then we return 1.
        // else we return 0 from outside of
        // the outer loop.
        if (count == k)
            return true;
    }
    return false;
}
  
// Driver function
public static void main(String[] args)
{
    int n = 27, k = 2;
    if (specialPrimeNumbers(n, k))
        System.out.println("YES");
    else
        System.out.println("NO");
}
}
// This code is contributed by mits


Python3




# Python3 program to check whether there
# exist at least k or not in range [2..n]
primes = [];
  
# Generating all the prime numbers
# from 2 to n.
def SieveofEratosthenes(n):
  
    visited = [False] * (n + 2);
    for i in range(2, n + 2):
        if (visited[i] == False): 
            for j in range(i * i, n + 2, i):
                visited[j] = True;
            primes.append(i);
  
def specialPrimeNumbers(n, k):
  
    SieveofEratosthenes(n);
    count = 0;
    for i in range(len(primes)):
        for j in range(i - 1): 
  
            # If a prime number is Special 
            # prime number, then we increments 
            # the value of k.
            if (primes[j] + 
                primes[j + 1] + 1 == primes[i]): 
                count += 1;
                break;
  
        # If at least k Special prime numbers
        # are present, then we return 1.
        # else we return 0 from outside of
        # the outer loop.
        if (count == k):
            return True;
  
    return False;
  
# Driver Code
n = 27;
k = 2;
if (specialPrimeNumbers(n, k)):
    print("YES");
else:
    print("NO");
  
# This code is contributed by mits


C#




// C# program to check whether there
// exist at least k or not in range [2..n]
using System;
using System.Collections; 
  
class GFG{
static ArrayList primes = new ArrayList();
// Generating all the prime numbers
// from 2 to n.
static void SieveofEratosthenes(int n)
{
    bool[] visited=new bool[n*n+2];
    for (int i = 2; i <= n + 1; i++)
        if (!visited[i]) {
            for (int j = i * i; j <= n + 1; j += i)
                visited[j] = true;
            primes.Add(i);
        }
}
  
static bool specialPrimeNumbers(int n, int k)
{
    SieveofEratosthenes(n);
    int count = 0;
    for (int i = 0; i < primes.Count; i++) {
        for (int j = 0; j < i - 1; j++) {
  
            // If a prime number is Special prime
            // number, then we increments the
            // value of k.
            if ((int)primes[j] + (int)primes[j + 1] + 1
                == (int)primes[i]) {
                count++;
                break;
            }
        }
  
        // If at least k Special prime numbers
        // are present, then we return 1.
        // else we return 0 from outside of
        // the outer loop.
        if (count == k)
            return true;
    }
    return false;
}
  
// Driver function
public static void Main()
{
    int n = 27, k = 2;
    if (specialPrimeNumbers(n, k))
        Console.WriteLine("YES");
    else
        Console.WriteLine("NO");
}
}
// This code is contributed by mits


PHP




<?php
// PHP program to check whether there
// exist at least k or not in range [2..n]
$primes = array();
  
// Generating all the prime numbers
// from 2 to n.
function SieveofEratosthenes($n)
{
    global $primes;
    $visited = array_fill(0, $n, false);
    for ($i = 2; $i <= $n + 1; $i++)
        if (!$visited[$i]) 
        {
            for ($j = $i * $i
                 $j <= $n + 1; $j += $i)
                $visited[$j] = true;
            array_push($primes, $i);
        }
}
  
function specialPrimeNumbers($n, $k)
{
    global $primes;
    SieveofEratosthenes($n);
    $count = 0;
    for ($i = 0; $i < count($primes); $i++) 
    {
        for ($j = 0; $j < $i - 1; $j++) 
        {
  
            // If a prime number is Special prime
            // number, then we increments the
            // value of k.
            if ($primes[$j] + 
                $primes[$j + 1] + 1 == $primes[$i]) 
            {
                $count++;
                break;
            }
        }
  
        // If at least k Special prime numbers
        // are present, then we return 1.
        // else we return 0 from outside of
        // the outer loop.
        if ($count == $k)
            return true;
    }
    return false;
}
  
// Driver Code
$n = 27;
$k = 2;
if (specialPrimeNumbers($n, $k))
    echo "YES\n";
else
    echo "NO\n";
  
// This code is contributed by mits
?>


Output:-

 YES

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :