Related Articles

# Special prime numbers

• Difficulty Level : Medium
• Last Updated : 01 Apr, 2021

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 ``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 primes = ``new` `ArrayList();``// 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

 ``

## Javascript

 ``

Output:-

` YES`

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up