Emirp numbers in C++

C++Server Side ProgrammingProgramming

Emirp number is a special type of number that is a prime number whose digits when reversed create another prime number (this prime number is different from the original one).

Emirp is the reverse of prime. 

Some prime numbers that are not emirp are palindromic prime and single digit prime numbers. 

Some Emirp Numbers are 13, 17, 37, 733.

Program to print all emirp numbers less than n.

Here, we are given a number n, and we need to print all emirp numbers less than or equal to n.

Let’s take an example to understand the problem,

Input: n = 40

Output: 13, 17, 31, 37

Solution Approach

To find all emirp numbers less than the given number, we need to find all prime numbers less than n and then check if number formed by reversing its digits is a prime number than its a emirp number, print it.

For finding the prime number till n and then rechecking its reverse digits, the best method is using sieve of Eratosthenes.

Program to illustrate the working of our solution,


Live Demo

#include <bits/stdc++.h>
using namespace std;

int reverseDigits(int x) {

   int digitRev = 0;
   while (x > 0)
      digitRev = (digitRev*10) + x%10;
      x = x/10;
   return digitRev;

void findAllEmirpNumber(int n) {

   bool primeNo[10001];
   memset(primeNo, true, sizeof(primeNo));

   for (int p=2; p*p<=10001; p++)
      if (primeNo[p] == true)
         for (int i=p*2; i<=10001; i += p)
            primeNo[i] = false;
   for (int p=2; p<=n; p++)
      if (primeNo[p])
         int revNo = reverseDigits(p);
         if (p != revNo && primeNo[revNo]) {
         if(revNo <= n)
         primeNo[revNo] = false;

int main()
   int n = 40;
   cout<<"All Emirp numbers less than or equal to "<<n<<" are\n";
   return 0;


All Emirp numbers less than or equal to 40 are 13 31 17 37
Published on 22-Jan-2021 12:44:04