Emirp is the word “prime” spelled backwards, and it refers to a prime number that becomes a new prime number when you reverse its digits. Emirps do not include palindromic primes (like 151 or 787) nor 1-digit primes like 7. 107, 113, 149, and 157 – reverse them and you’ve got a new prime number on your hands. Source: Wiki
Given a number n, the task is to print all Emirps smaller than or equal to n.
Examples :
Input : n = 40
Output : 13 31
Input : n = 100
Output : 13 31 17 71 37 73 79 97
Below are the steps :
1) Use Sieve of Eratosthenes to generate all primes smaller than or equal to n. We can also use sieve of sundaram.
2) Traverse all generated prime numbers. For every traversed prime number print this number and its reverse if following conditions are satisfied.
………….a) If reverse is also prime.
………….b) Reverse is not same as prime (palindromes are not allowed)
………….c) Reverse is smaller than or equal to n.
Below is the implementation of above idea.
C++
#include <bits/stdc++.h>
using namespace std;
int reverse( int x)
{
int rev = 0;
while (x > 0)
{
rev = (rev*10) + x%10;
x = x/10;
}
return rev;
}
void printEmirp( int n)
{
bool prime[n+1];
memset (prime, true , sizeof (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 ;
}
}
for ( int p=2; p<=n; p++)
{
if (prime[p])
{
int rev = reverse(p);
if (p != rev && rev <= n && prime[rev])
{
cout << p << " " << rev << " " ;
prime[rev] = false ;
}
}
}
}
int main()
{
int n = 40;
printEmirp(n);
return 0;
}
|
Java
import java.util.Arrays;
class GFG
{
static int reverse( int x)
{
int rev = 0 ;
while (x > 0 )
{
rev = (rev * 10 ) + x % 10 ;
x = x / 10 ;
}
return rev;
}
static void printEmirp( int n)
{
boolean prime[]= new boolean [n + 1 ];
Arrays.fill(prime, true );
for ( int p = 2 ; p * p <= n; p++)
{
if (prime[p] == true )
{
for ( int i = p * 2 ; i <= n; i += p)
prime[i] = false ;
}
}
for ( int p = 2 ; p <= n; p++)
{
if (prime[p])
{
int rev = reverse(p);
if (p != rev && rev <= n && prime[rev])
{
System.out.print(p + " " + rev + " " );
prime[rev] = false ;
}
}
}
}
public static void main (String[] args)
{
int n = 100 ;
printEmirp(n);
}
}
|
Python3
def reverse(x):
rev = 0 ;
while (x > 0 ):
rev = (rev * 10 ) + x % 10 ;
x = int (x / 10 );
return rev;
def printEmirp(n):
prime = [ 1 ] * (n + 1 );
p = 2 ;
while (p * p < = n):
if (prime[p] = = 1 ):
for i in range (p * 2 , n + 1 , p):
prime[i] = 0 ;
p + = 1 ;
for p in range ( 2 , n + 1 ):
if (prime[p] = = 1 ):
rev = reverse(p);
if (p ! = rev and rev < = n and
prime[rev] = = 1 ):
print (p, rev, end = " " );
prime[rev] = 0 ;
n = 100 ;
printEmirp(n);
|
C#
using System;
class GFG
{
static int reverse( int x)
{
int rev = 0;
while (x > 0)
{
rev = (rev * 10) + x % 10;
x = x / 10;
}
return rev;
}
static void printEmirp( int n)
{
bool []prime = new bool [n + 1];
for ( int i = 0; i < n + 1; i++)
prime[i] = true ;
for ( int p = 2; p * p <= n; p++)
{
if (prime[p] == true )
{
for ( int i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
for ( int p = 2; p <= n; p++)
{
if (prime[p])
{
int rev = reverse(p);
if (p != rev && rev <= n && prime[rev])
{
Console.Write(p + " " + rev + " " );
prime[rev] = false ;
}
}
}
}
public static void Main ()
{
int n = 100;
printEmirp(n);
}
}
|
PHP
<?php
function reverse( $x )
{
$rev = 0;
while ( $x > 0)
{
$rev = ( $rev * 10) + $x % 10;
$x = (int)( $x / 10);
}
return $rev ;
}
function printEmirp( $n )
{
$prime = array_fill (0, ( $n + 1), 1);
for ( $p = 2; $p * $p <= $n ; $p ++)
{
if ( $prime [ $p ] == 1)
{
for ( $i = $p * 2; $i <= $n ; $i += $p )
$prime [ $i ] = 0;
}
}
for ( $p = 2; $p <= $n ; $p ++)
{
if ( $prime [ $p ] == 1)
{
$rev = reverse( $p );
if ( $p != $rev && $rev <= $n &&
$prime [ $rev ] == 1)
{
echo $p . " " . $rev . " " ;
$prime [ $rev ] = 0;
}
}
}
}
$n = 100;
printEmirp( $n );
?>
|
Javascript
<script>
function reverse(x)
{
var rev = 0;
while (x > 0)
{
rev = (rev * 10) + x % 10;
x = parseInt(x / 10);
}
return rev;
}
function printEmirp(n)
{
var prime=Array.from({length: n+1},
(_, i) => true );
for (p = 2; p * p <= n; p++)
{
if (prime[p] == true )
{
for (i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
for (p = 2; p <= n; p++)
{
if (prime[p])
{
var rev = reverse(p);
if (p != rev && rev <= n &&
prime[rev])
{
document.write(p + " " + rev + " " );
prime[rev] = false ;
}
}
}
}
var n = 100;
printEmirp(n);
</script>
|
Output :
13 31 17 71 37 73 79 97
Last Updated :
09 Mar, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...