A Right-truncatable prime is a prime which remains prime when the last (“right”) digit is successively removed. For example, 239 is right-truncatable prime since 239, 23 and 2 are all prime. There are 83 right-truncatable primes.
The task is to check whether the given number (N > 0) is right-truncatable prime or not.
Examples:
Input: 239 Output: Yes Input: 101 Output: No 101 is not right-truncatable prime because numbers formed are 101, 10 and 1. Here, 101 is prime but 10 and 1 are not prime.
The idea is to generate all the primes less than or equal to the given number N using Sieve of Eratosthenes. Once we have generated all such primes, then we check whether the number remains prime when the last (“right”) digit is successively removed.
//C++ Program to check // whether a given number // is right-truncatable // prime or not. #include<bits/stdc++.h> using namespace std;
// Generate all prime numbers less than n. bool sieveOfEratosthenes( int n, bool isPrime[])
{ // Initialize all entries
// of boolean array as
// true. A value in
// isPrime[i] will finally
// be false if i is Not a
// prime, else true
// bool isPrime[n+1];
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2; p * p<=n; p++)
{
// If isPrime[p] is not changed, then it is
// a prime
if (isPrime[p] == true )
{
// Update all multiples of p
for ( int i = p * 2; i <= n; i += p)
isPrime[i] = false ;
}
}
} // Returns true if n is right-truncatable, // else false bool rightTruPrime( int n)
{ // Generating primes using Sieve
bool isPrime[n+1];
sieveOfEratosthenes(n, isPrime);
// Checking whether the number remains
// prime when the last ("right")
// digit is successively removed
while (n)
{
if (isPrime[n])
n = n / 10;
else
return false ;
}
return true ;
} // Driver program int main()
{ int n = 59399;
if (rightTruPrime(n))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
} |
// Java code to check // right-truncatable // prime or not. import java.io.*;
class GFG {
// Generate all prime
// numbers less than n.
static void sieveOfEratosthenes
( int n, boolean isPrime[])
{
// Initialize all entries of
// boolean array as true. A
// value in isPrime[i] will
// finally be false if i is
// Not a prime, else true
// bool isPrime[n+1];
isPrime[ 0 ] = isPrime[ 1 ] = false ;
for ( int i = 2 ; i <= n; i++)
isPrime[i] = true ;
for ( int p= 2 ; p*p<=n; p++)
{
// If isPrime[p] is not
// changed, then it
// is a prime
if (isPrime[p] == true )
{
// Update all multiples of p
for ( int i = p * 2 ; i <= n; i += p)
isPrime[i] = false ;
}
}
}
// Returns true if n is
// right-truncatable,
// else false
static boolean rightTruPrime( int n)
{
// Generating primes using Sieve
boolean isPrime[] = new boolean [n+ 1 ];
sieveOfEratosthenes(n, isPrime);
// Checking whether the number
// remains prime when the last (right)
// digit is successively removed
while (n != 0 )
{
if (isPrime[n])
n = n / 10 ;
else
return false ;
}
return true ;
}
// Driver program
public static void main(String args[])
{
int n = 59399 ;
if (rightTruPrime(n))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
} /* This code is contributed by Nikita Tiwari.*/ |
# Python3 Program to check # whether a given number # is right-truncatable # prime or not. # Generate all prime numbers less than n. def sieveOfEratosthenes(n,isPrime) :
# Initialize all entries
# of boolean array as
# true. A value in isPrime[i]
# will finally be false if
# i is Not a prime, else true
# bool isPrime[n+1];
isPrime[ 0 ] = isPrime[ 1 ] = False
for i in range ( 2 , n + 1 ) :
isPrime[i] = True
p = 2
while (p * p < = n) :
# If isPrime[p] is not changed, then it is
# a prime
if (isPrime[p] = = True ) :
# Update all multiples of p
i = p * 2
while (i < = n) :
isPrime[i] = False
i = i + p
p = p + 1
# Returns true if n is right-truncatable, else false def rightTruPrime(n) :
# Generating primes using Sieve
isPrime = [ None ] * (n + 1 )
sieveOfEratosthenes(n, isPrime)
# Checking whether the
# number remains prime
# when the last ("right")
# digit is successively
# removed
while (n ! = 0 ) :
if (isPrime[n]) :
n = n / / 10 else :
return False
return True
# Driven program n = 59399
if (rightTruPrime(n)) :
print ( "Yes" )
else :
print ( "No" )
# This code is contributed by Nikita Tiwari. |
// C# code to check right- // truncatable prime or not using System;
class GFG {
// Generate all prime
// numbers less than n.
static void sieveOfEratosthenes( int n, bool [] isPrime)
{
// Initialize all entries of
// boolean array as true. A
// value in isPrime[i] will
// finally be false if i is
// Not a prime, else true
// bool isPrime[n+1];
isPrime[0] = isPrime[1] = false ;
for ( int i = 2; i <= n; i++)
isPrime[i] = true ;
for ( int p = 2; p * p <= n; p++) {
// If isPrime[p] is not
// changed, then it
// is a prime
if (isPrime[p] == true ) {
// Update all multiples of p
for ( int i = p * 2; i <= n; i += p)
isPrime[i] = false ;
}
}
}
// Returns true if n is right-
// truncatable, else false
static bool rightTruPrime( int n)
{
// Generating primes using Sieve
bool [] isPrime = new bool [n + 1];
sieveOfEratosthenes(n, isPrime);
// Checking whether the number
// remains prime when last (right)
// digit is successively removed
while (n != 0) {
if (isPrime[n])
n = n / 10;
else
return false ;
}
return true ;
}
// Driven program
public static void Main()
{
int n = 59399;
if (rightTruPrime(n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
} // This code is contributed by Anant Agarwal |
<?php // Program to check whether a given number // is right-truncatable prime or not. // Generate all prime numbers less than n. function sieveOfEratosthenes( $n , & $isPrime )
{ // Initialize all entries of boolean
// array as true. A value in isPrime[i]
// will finally be false if i is Not a
// prime, else true bool isPrime[n+1];
$isPrime [0] = $isPrime [1] = false;
for ( $p = 2; $p * $p <= $n ; $p ++)
{
// If isPrime[p] is not changed,
// then it is a prime
if ( $isPrime [ $p ] == true)
{
// Update all multiples of p
for ( $i = $p * 2; $i <= $n ; $i += $p )
$isPrime [ $i ] = false;
}
}
} // Returns true if n is right-truncatable, // else false function rightTruPrime( $n )
{ // Generating primes using Sieve
$isPrime = array_fill (0, $n + 1, true);
sieveOfEratosthenes( $n , $isPrime );
// Checking whether the number remains
// prime when the last ("right")
// digit is successively removed
while ( $n )
{
if ( $isPrime [ $n ])
$n = (int)( $n / 10);
else
return false;
}
return true;
} // Driver Code $n = 59399;
if (rightTruPrime( $n ))
echo "Yes\n" ;
else echo "No\n" ;
// This code is contributed by mits ?> |
<script> // javascript code to check // right-truncatable // prime or not. // Generate all prime
// numbers less than n.
function sieveOfEratosthenes(n, isPrime)
{
// Initialize all entries of
// boolean array as true. A
// value in isPrime[i] will
// finally be false if i is
// Not a prime, else true
// bool isPrime[n+1];
isPrime[0] = isPrime[1] = false ;
for (let i = 2; i <= n; i++)
isPrime[i] = true ;
for (let p = 2; p * p <= n; p++) {
// If isPrime[p] is not
// changed, then it
// is a prime
if (isPrime[p] == true ) {
// Update all multiples of p
for (let i = p * 2; i <= n; i += p)
isPrime[i] = false ;
}
}
}
// Returns true if n is
// right-truncatable,
// else false
function rightTruPrime(n)
{
// Generating primes using Sieve
let isPrime = new Array(n + 1).fill( false );
sieveOfEratosthenes(n, isPrime);
// Checking whether the number
// remains prime when the last (right)
// digit is successively removed
while (n != 0) {
if (isPrime[n])
n = parseInt(n / 10);
else
return false ;
}
return true ;
}
// Driver program
var n = 59399;
if (rightTruPrime(n))
document.write( "Yes" );
else
document.write( "No" );
// This code is contributed by shikhasingrajput </script> |
Output:
Yes
Related Article:Left-Truncatable Prime
References:
https://en.wikipedia.org/wiki/Truncatable_prime