Skip to main content

Find the all right truncatable primes in n natural numbers

"Right truncatable primes" are prime numbers that remain prime when their rightmost digits are successively removed. For example, 3797 is a right truncatable prime because 3797, 379, 37, and 3 are all prime numbers.

To find all right truncatable primes in n natural numbers, you would need to generate all prime numbers up to n and then check each prime number to see if it is right truncatable. One way to generate prime numbers is to use the Sieve of Eratosthenes, which is an efficient algorithm for finding all primes up to a given limit.

Program Solution

// C program for
// Find the all right truncatable primes in n natural numbers
#include <stdio.h>

// Find all prime numbers which have smaller and equal to given number n
void sieve_of_eratosthenes(int prime[], int n)
{
	// Initial two numbers are not prime (0 and 1)
	prime[0] = 0;
	prime[1] = 0;
	// Set the initial (2 to n element is prime)
	for (int i = 2; i <= n; ++i)
	{
		prime[i] = 1;
	}
	// Initial 0 and 1 are not prime
	// We start to 2
	for (int i = 2; i * i <= n; ++i)
	{
		if (prime[i] == 1)
		{
			// When i is prime number
			// Modify the prime status of all next multiplier of location i
			for (int j = i * i; j <= n; j += i)
			{
				prime[j] = 0;
			}
		}
	}
}
void rightTruncatablePrime(int n)
{
	if (n <= 1)
	{
		return;
	}
	int prime[n + 1];
	sieve_of_eratosthenes(prime, n);
	printf("\n Given n : %d", n);
	printf("\n");
	for (int i = 2; i <= n; ++i)
	{
		if (prime[i] == 1)
		{
			int temp = i;
			while (temp > 0 && prime[temp] == 1)
			{
				// Remove last digit
				temp = temp / 10;
			}
			if (temp == 0)
			{
				printf(" %d", i);
			}
		}
	}
}
int main(int argc, char
	const * argv[])
{
	// Test A
	// n = 30
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	----------
	*/
	rightTruncatablePrime(30);
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	rightTruncatablePrime(10000);
	return 0;
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
/*
    Java Program for
	Find the all right truncatable primes in n natural numbers
*/
public class TruncatablePrimes
{
	// Find all prime numbers which have smaller and equal to given number n
	public void sieveOfEratosthenes(boolean[] prime, int n)
	{
		// Initial two numbers are not prime (0 and 1)
		prime[0] = false;
		prime[1] = false;
		// Set the initial (2 to n element is prime)
		for (int i = 2; i <= n; ++i)
		{
			prime[i] = true;
		}
		// Initial 0 and 1 are not prime
		// We start to 2
		for (int i = 2; i *i <= n; ++i)
		{
			if (prime[i] == true)
			{
				// When i is prime number
				// Modify the prime status of all next 
              	// multiplier of location i
				for (int j = i *i; j <= n; j += i)
				{
					prime[j] = false;
				}
			}
		}
	}
	public void rightTruncatablePrime(int n)
	{
		if (n <= 1)
		{
			return;
		}
		boolean[] prime = new boolean[n + 1];
		sieveOfEratosthenes(prime, n);
		System.out.print("\n Given n : " + n);
		System.out.print("\n");
		for (int i = 2; i <= n; ++i)
		{
			if (prime[i] == true)
			{
				int temp = i;
				while (temp > 0 && prime[temp] == true)
				{
					// Remove last digit
					temp = temp / 10;
				}
				if (temp == 0)
				{
					System.out.print(" " + i);
				}
			}
		}
	}
	public static void main(String[] args)
	{
		TruncatablePrimes task = new TruncatablePrimes();
		// Test A
		// n = 30
		/*
			2
			3
			5
			7
			23  2
			29  2
			----------
		*/
		task.rightTruncatablePrime(30);
		// Test B
		// n = 10000
		/*
		  2
		  3
		  5
		  7
		  23  2
		  29  2
		  31  3
		  37  3
		  53  5
		  59  5
		  71  7
		  73  7
		  79  7
		  233  23  2
		  239  23  2
		  293  29  2
		  311  31  3
		  313  31  3
		  317  31  3
		  373  37  3
		  379  37  3
		  593  59  5
		  599  59  5
		  719  71  7
		  733  73  7
		  739  73  7
		  797  79  7
		  2333  233  23  2
		  2339  233  23  2
		  2393  239  23  2
		  2399  239  23  2
		  2939  293  29  2
		  3119  311  31  3
		  3137  313  31  3
		  3733  373  37  3
		  3739  373  37  3
		  3793  379  37  3
		  3797  379  37  3
		  5939  593  59  5
		  7193  719  71  7
		  7331  733  73  7
		  7333  733  73  7
		  7393  739  73  7  
		  ----------------
		  [Remove right digit]
		  Example prime = 5939
		  5939
		  593
		  59
		  5
		  ----------------------
		  All is prime so 5939
		  right truncatable prime
		*/
		task.rightTruncatablePrime(10000);
	}
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
// Include header file
#include <iostream>

using namespace std;
/*
    C++ Program for
Find the all right truncatable primes in n natural numbers
*/
class TruncatablePrimes
{
	public:
		// Find all prime numbers which have smaller and equal to
		// given number n
		void sieveOfEratosthenes(bool prime[], int n)
		{
			// Initial two numbers are not prime (0 and 1)
			prime[0] = false;
			prime[1] = false;
			// Set the initial (2 to n element is prime)
			for (int i = 2; i <= n; ++i)
			{
				prime[i] = true;
			}
			// Initial 0 and 1 are not prime
			// We start to 2
			for (int i = 2; i *i <= n; ++i)
			{
				if (prime[i] == true)
				{
					// When i is prime number
					// Modify the prime status of all next
					// multiplier of location i
					for (int j = i *i; j <= n; j += i)
					{
						prime[j] = false;
					}
				}
			}
		}
	void rightTruncatablePrime(int n)
	{
		if (n <= 1)
		{
			return;
		}
		bool prime[n + 1];
		this->sieveOfEratosthenes(prime, n);
		cout << "\n Given n : " << n;
		cout << "\n";
		for (int i = 2; i <= n; ++i)
		{
			if (prime[i] == true)
			{
				int temp = i;
				while (temp > 0 && prime[temp] == true)
				{
					// Remove last digit
					temp = temp / 10;
				}
				if (temp == 0)
				{
					cout << " " << i;
				}
			}
		}
	}
};
int main()
{
	TruncatablePrimes *task = new TruncatablePrimes();
	// Test A
	// n = 30
	/*
		2
		3
		5
		7
		23  2
		29  2
		----------
	*/
	task->rightTruncatablePrime(30);
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	task->rightTruncatablePrime(10000);
	return 0;
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
// Include namespace system
using System;
/*
    Csharp Program for
Find the all right truncatable primes in n natural numbers
*/
public class TruncatablePrimes
{
	// Find all prime numbers which have smaller and equal to
	// given number n
	public void sieveOfEratosthenes(Boolean[] prime, int n)
	{
		// Initial two numbers are not prime (0 and 1)
		prime[0] = false;
		prime[1] = false;
		// Set the initial (2 to n element is prime)
		for (int i = 2; i <= n; ++i)
		{
			prime[i] = true;
		}
		// Initial 0 and 1 are not prime
		// We start to 2
		for (int i = 2; i * i <= n; ++i)
		{
			if (prime[i] == true)
			{
				// When i is prime number
				// Modify the prime status of all next
				// multiplier of location i
				for (int j = i * i; j <= n; j += i)
				{
					prime[j] = false;
				}
			}
		}
	}
	public void rightTruncatablePrime(int n)
	{
		if (n <= 1)
		{
			return;
		}
		Boolean[] prime = new Boolean[n + 1];
		this.sieveOfEratosthenes(prime, n);
		Console.Write("\n Given n : " + n);
		Console.Write("\n");
		for (int i = 2; i <= n; ++i)
		{
			if (prime[i] == true)
			{
				int temp = i;
				while (temp > 0 && prime[temp] == true)
				{
					// Remove last digit
					temp = temp / 10;
				}
				if (temp == 0)
				{
					Console.Write(" " + i);
				}
			}
		}
	}
	public static void Main(String[] args)
	{
		TruncatablePrimes task = new TruncatablePrimes();
		// Test A
		// n = 30
		/*
			2
			3
			5
			7
			23  2
			29  2
			----------
		*/
		task.rightTruncatablePrime(30);
		// Test B
		// n = 10000
		/*
		  2
		  3
		  5
		  7
		  23  2
		  29  2
		  31  3
		  37  3
		  53  5
		  59  5
		  71  7
		  73  7
		  79  7
		  233  23  2
		  239  23  2
		  293  29  2
		  311  31  3
		  313  31  3
		  317  31  3
		  373  37  3
		  379  37  3
		  593  59  5
		  599  59  5
		  719  71  7
		  733  73  7
		  739  73  7
		  797  79  7
		  2333  233  23  2
		  2339  233  23  2
		  2393  239  23  2
		  2399  239  23  2
		  2939  293  29  2
		  3119  311  31  3
		  3137  313  31  3
		  3733  373  37  3
		  3739  373  37  3
		  3793  379  37  3
		  3797  379  37  3
		  5939  593  59  5
		  7193  719  71  7
		  7331  733  73  7
		  7333  733  73  7
		  7393  739  73  7  
		  ----------------
		  [Remove right digit]
		  Example prime = 5939
		  5939
		  593
		  59
		  5
		  ----------------------
		  All is prime so 5939
		  right truncatable prime
		*/
		task.rightTruncatablePrime(10000);
	}
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
package main
import "fmt"
/*
    Go Program for
Find the all right truncatable primes in n natural numbers
*/
type TruncatablePrimes struct {}
func getTruncatablePrimes() * TruncatablePrimes {
	var me *TruncatablePrimes = &TruncatablePrimes {}
	return me
}
// Find all prime numbers which have smaller and equal to
// given number n
func(this TruncatablePrimes) sieveOfEratosthenes(prime[] bool, n int) {
	// Initial two numbers are not prime (0 and 1)
	prime[0] = false
	prime[1] = false
	// Initial 0 and 1 are not prime
	// We start to 2
	for i := 2 ; i * i <= n ; i++ {
		if prime[i] == true {
			// When i is prime number
			// Modify the prime status of all next
			// multiplier of location i
			for j := i * i ; j <= n ; j += i {
				prime[j] = false
			}
		}
	}
}
func(this TruncatablePrimes) rightTruncatablePrime(n int) {
	if n <= 1 {
		return
	}
	var prime = make([] bool, n + 1)
	for i := 0; i <= n; i++ {
		prime[i] = true
	}
	this.sieveOfEratosthenes(prime, n)
	fmt.Print("\n Given n : ", n)
	fmt.Print("\n")
	for i := 2 ; i <= n ; i++ {
		if prime[i] == true {
			var temp int = i
			for (temp > 0 && prime[temp] == true) {
				// Remove last digit
				temp = temp / 10
			}
			if temp == 0 {
				fmt.Print(" ", i)
			}
		}
	}
}
func main() {
	var task * TruncatablePrimes = getTruncatablePrimes()
	// Test A
	// n = 30
	/*
		2
		3
		5
		7
		23  2
		29  2
		----------
	*/
	task.rightTruncatablePrime(30)
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	task.rightTruncatablePrime(10000)
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
<?php
/*
    Php Program for
Find the all right truncatable primes in n natural numbers
*/
class TruncatablePrimes
{
	// Find all prime numbers which have smaller and equal to
	// given number n
	public	function sieveOfEratosthenes(&$prime, $n)
	{
		// Initial two numbers are not prime (0 and 1)
		$prime[0] = false;
		$prime[1] = false;
		// Initial 0 and 1 are not prime
		// We start to 2
		for ($i = 2; $i * $i <= $n; ++$i)
		{
			if ($prime[$i] == true)
			{
				// When i is prime number
				// Modify the prime status of all next
				// multiplier of location i
				for ($j = $i * $i; $j <= $n; $j += $i)
				{
					$prime[$j] = false;
				}
			}
		}
	}
	public	function rightTruncatablePrime($n)
	{
		if ($n <= 1)
		{
			return;
		}
		$prime = array_fill(0, $n + 1, true);
		$this->sieveOfEratosthenes($prime, $n);
		echo("\n Given n : ".$n);
		echo("\n");
		for ($i = 2; $i <= $n; ++$i)
		{
			if ($prime[$i] == true)
			{
				$temp = $i;
				while ($temp > 0 && $prime[$temp] == true)
				{
					// Remove last digit
					$temp = (int)($temp / 10);
				}
				if ($temp == 0)
				{
					echo(" ".$i);
				}
			}
		}
	}
}

function main()
{
	$task = new TruncatablePrimes();
	// Test A
	// n = 30
	/*
		2
		3
		5
		7
		23  2
		29  2
		----------
	*/
	$task->rightTruncatablePrime(30);
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	$task->rightTruncatablePrime(10000);
}
main();

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
/*
    Node JS Program for
Find the all right truncatable primes in n natural numbers
*/
class TruncatablePrimes
{
	// Find all prime numbers which have smaller and equal to
	// given number n
	sieveOfEratosthenes(prime, n)
	{
		// Initial two numbers are not prime (0 and 1)
		prime[0] = false;
		prime[1] = false;
		// Initial 0 and 1 are not prime
		// We start to 2
		for (var i = 2; i * i <= n; ++i)
		{
			if (prime[i] == true)
			{
				// When i is prime number
				// Modify the prime status of all next
				// multiplier of location i
				for (var j = i * i; j <= n; j += i)
				{
					prime[j] = false;
				}
			}
		}
	}
	rightTruncatablePrime(n)
	{
		if (n <= 1)
		{
			return;
		}
		var prime = Array(n + 1).fill(true);
		this.sieveOfEratosthenes(prime, n);
		process.stdout.write("\n Given n : " + n);
		process.stdout.write("\n");
		for (var i = 2; i <= n; ++i)
		{
			if (prime[i] == true)
			{
				var temp = i;
				while (temp > 0 && prime[temp] == true)
				{
					// Remove last digit
					temp = parseInt(temp / 10);
				}
				if (temp == 0)
				{
					process.stdout.write(" " + i);
				}
			}
		}
	}
}

function main()
{
	var task = new TruncatablePrimes();
	// Test A
	// n = 30
	/*
		2
		3
		5
		7
		23  2
		29  2
		----------
	*/
	task.rightTruncatablePrime(30);
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	task.rightTruncatablePrime(10000);
}
main();

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
#    Python 3 Program for
# Find the all right truncatable primes in n natural numbers
class TruncatablePrimes :
	#  Find all prime numbers which have smaller and equal to
	#  given number n
	def sieveOfEratosthenes(self, prime, n) :
		#  Initial two numbers are not prime (0 and 1)
		prime[0] = False
		prime[1] = False
		i = 2
		#  Initial 0 and 1 are not prime
		#  We start to 2
		while (i * i <= n) :
			if (prime[i] == True) :
				j = i * i
				#  When i is prime number
				#  Modify the prime status of all next
				#  multiplier of location i
				while (j <= n) :
					prime[j] = False
					j += i
				
			
			i += 1
		
	
	def rightTruncatablePrime(self, n) :
		if (n <= 1) :
			return
		
		prime = [True] * (n + 1)
		self.sieveOfEratosthenes(prime, n)
		print("\n Given n : ", n, end = "")
		print(end = "\n")
		i = 2
		while (i <= n) :
			if (prime[i] == True) :
				temp = i
				while (temp > 0 and prime[temp] == True) :
					#  Remove last digit
					temp = int(temp / 10)
				
				if (temp == 0) :
					print(" ", i, end = "")
				
			
			i += 1
		
	

def main() :
	task = TruncatablePrimes()
	#  Test A
	#  n = 30
	# 	2
	# 	3
	# 	5
	# 	7
	# 	23  2
	# 	29  2
	# 	----------
	task.rightTruncatablePrime(30)
	#  Test B
	#  n = 10000
	#  2
	#  3
	#  5
	#  7
	#  23  2
	#  29  2
	#  31  3
	#  37  3
	#  53  5
	#  59  5
	#  71  7
	#  73  7
	#  79  7
	#  233  23  2
	#  239  23  2
	#  293  29  2
	#  311  31  3
	#  313  31  3
	#  317  31  3
	#  373  37  3
	#  379  37  3
	#  593  59  5
	#  599  59  5
	#  719  71  7
	#  733  73  7
	#  739  73  7
	#  797  79  7
	#  2333  233  23  2
	#  2339  233  23  2
	#  2393  239  23  2
	#  2399  239  23  2
	#  2939  293  29  2
	#  3119  311  31  3
	#  3137  313  31  3
	#  3733  373  37  3
	#  3739  373  37  3
	#  3793  379  37  3
	#  3797  379  37  3
	#  5939  593  59  5
	#  7193  719  71  7
	#  7331  733  73  7
	#  7333  733  73  7
	#  7393  739  73  7  
	#  ----------------
	#  [Remove right digit]
	#  Example prime = 5939
	#  5939
	#  593
	#  59
	#  5
	#  ----------------------
	#  All is prime so 5939
	#  right truncatable prime
	task.rightTruncatablePrime(10000)

if __name__ == "__main__": main()

Output

 Given n :  30
  2  3  5  7  23  29
 Given n :  10000
  2  3  5  7  23  29  31  37  53  59  71  73  79  233  239  293  311  313  317  373  379  593  599  719  733  739  797  2333  2339  2393  2399  2939  3119  3137  3733  3739  3793  3797  5939  7193  7331  7333  7393
#    Ruby Program for
# Find the all right truncatable primes in n natural numbers
class TruncatablePrimes 
	#  Find all prime numbers which have smaller and equal to
	#  given number n
	def sieveOfEratosthenes(prime, n) 
		#  Initial two numbers are not prime (0 and 1)
		prime[0] = false
		prime[1] = false
		i = 2
		#  Initial 0 and 1 are not prime
		#  We start to 2
		while (i * i <= n) 
			if (prime[i] == true) 
				j = i * i
				#  When i is prime number
				#  Modify the prime status of all next
				#  multiplier of location i
				while (j <= n) 
					prime[j] = false
					j += i
				end

			end

			i += 1
		end

	end

	def rightTruncatablePrime(n) 
		if (n <= 1) 
			return
		end

		prime = Array.new(n + 1) {true}
		self.sieveOfEratosthenes(prime, n)
		print("\n Given n : ", n)
		print("\n")
		i = 2
		while (i <= n) 
			if (prime[i] == true) 
				temp = i
				while (temp > 0 && prime[temp] == true) 
					#  Remove last digit
					temp = temp / 10
				end

				if (temp == 0) 
					print(" ", i)
				end

			end

			i += 1
		end

	end

end

def main() 
	task = TruncatablePrimes.new()
	#  Test A
	#  n = 30
	# 	2
	# 	3
	# 	5
	# 	7
	# 	23  2
	# 	29  2
	# 	----------
	task.rightTruncatablePrime(30)
	#  Test B
	#  n = 10000
	#  2
	#  3
	#  5
	#  7
	#  23  2
	#  29  2
	#  31  3
	#  37  3
	#  53  5
	#  59  5
	#  71  7
	#  73  7
	#  79  7
	#  233  23  2
	#  239  23  2
	#  293  29  2
	#  311  31  3
	#  313  31  3
	#  317  31  3
	#  373  37  3
	#  379  37  3
	#  593  59  5
	#  599  59  5
	#  719  71  7
	#  733  73  7
	#  739  73  7
	#  797  79  7
	#  2333  233  23  2
	#  2339  233  23  2
	#  2393  239  23  2
	#  2399  239  23  2
	#  2939  293  29  2
	#  3119  311  31  3
	#  3137  313  31  3
	#  3733  373  37  3
	#  3739  373  37  3
	#  3793  379  37  3
	#  3797  379  37  3
	#  5939  593  59  5
	#  7193  719  71  7
	#  7331  733  73  7
	#  7333  733  73  7
	#  7393  739  73  7  
	#  ----------------
	#  [Remove right digit]
	#  Example prime = 5939
	#  5939
	#  593
	#  59
	#  5
	#  ----------------------
	#  All is prime so 5939
	#  right truncatable prime
	task.rightTruncatablePrime(10000)
end

main()

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
/*
    Scala Program for
Find the all right truncatable primes in n natural numbers
*/
class TruncatablePrimes()
{
	// Find all prime numbers which have smaller and equal to
	// given number n
	def sieveOfEratosthenes(prime: Array[Boolean], n: Int): Unit = {
		// Initial two numbers are not prime (0 and 1)
		prime(0) = false;
		prime(1) = false;
		var i: Int = 2;
		// Initial 0 and 1 are not prime
		// We start to 2
		while (i * i <= n)
		{
			if (prime(i) == true)
			{
				var j: Int = i * i;
				// When i is prime number
				// Modify the prime status of all next
				// multiplier of location i
				while (j <= n)
				{
					prime(j) = false;
					j += i;
				}
			}
			i += 1;
		}
	}
	def rightTruncatablePrime(n: Int): Unit = {
		if (n <= 1)
		{
			return;
		}
		var prime: Array[Boolean] = Array.fill[Boolean](n + 1)(true);
		sieveOfEratosthenes(prime, n);
		print("\n Given n : " + n);
		print("\n");
		var i: Int = 2;
		while (i <= n)
		{
			if (prime(i) == true)
			{
				var temp: Int = i;
				while (temp > 0 && prime(temp) == true)
				{
					// Remove last digit
					temp = temp / 10;
				}
				if (temp == 0)
				{
					print(" " + i);
				}
			}
			i += 1;
		}
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		var task: TruncatablePrimes = new TruncatablePrimes();
		// Test A
		// n = 30
		/*
			2
			3
			5
			7
			23  2
			29  2
			----------
		*/
		task.rightTruncatablePrime(30);
		// Test B
		// n = 10000
		/*
		  2
		  3
		  5
		  7
		  23  2
		  29  2
		  31  3
		  37  3
		  53  5
		  59  5
		  71  7
		  73  7
		  79  7
		  233  23  2
		  239  23  2
		  293  29  2
		  311  31  3
		  313  31  3
		  317  31  3
		  373  37  3
		  379  37  3
		  593  59  5
		  599  59  5
		  719  71  7
		  733  73  7
		  739  73  7
		  797  79  7
		  2333  233  23  2
		  2339  233  23  2
		  2393  239  23  2
		  2399  239  23  2
		  2939  293  29  2
		  3119  311  31  3
		  3137  313  31  3
		  3733  373  37  3
		  3739  373  37  3
		  3793  379  37  3
		  3797  379  37  3
		  5939  593  59  5
		  7193  719  71  7
		  7331  733  73  7
		  7333  733  73  7
		  7393  739  73  7  
		  ----------------
		  [Remove right digit]
		  Example prime = 5939
		  5939
		  593
		  59
		  5
		  ----------------------
		  All is prime so 5939
		  right truncatable prime
		*/
		task.rightTruncatablePrime(10000);
	}
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393
/*
    Swift 4 Program for
Find the all right truncatable primes in n natural numbers
*/
class TruncatablePrimes
{
	// Find all prime numbers which have smaller and equal to
	// given number n
	func sieveOfEratosthenes(_ prime: inout[Bool], _ n: Int)
	{
		// Initial two numbers are not prime (0 and 1)
		prime[0] = false;
		prime[1] = false;
		var i: Int = 2;
		// Initial 0 and 1 are not prime
		// We start to 2
		while (i * i <= n)
		{
			if (prime[i] == true)
			{
				var j: Int = i * i;
				// When i is prime number
				// Modify the prime status of all next
				// multiplier of location i
				while (j <= n)
				{
					prime[j] = false;
					j += i;
				}
			}
			i += 1;
		}
	}
	func rightTruncatablePrime(_ n: Int)
	{
		if (n <= 1)
		{
			return;
		}
		var prime: [Bool] = Array(repeating: true, count: n + 1);
		self.sieveOfEratosthenes(&prime, n);
		print("\n Given n : ", n, terminator: "");
		print(terminator: "\n");
		var i: Int = 2;
		while (i <= n)
		{
			if (prime[i] == true)
			{
				var temp: Int = i;
				while (temp > 0 && prime[temp] == true)
				{
					// Remove last digit
					temp = temp / 10;
				}
				if (temp == 0)
				{
					print(" ", i, terminator: "");
				}
			}
			i += 1;
		}
	}
}
func main()
{
	let task: TruncatablePrimes = TruncatablePrimes();
	// Test A
	// n = 30
	/*
		2
		3
		5
		7
		23  2
		29  2
		----------
	*/
	task.rightTruncatablePrime(30);
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	task.rightTruncatablePrime(10000);
}
main();

Output

 Given n :  30
  2  3  5  7  23  29
 Given n :  10000
  2  3  5  7  23  29  31  37  53  59  71  73  79  233  239  293  311  313  317  373  379  593  599  719  733  739  797  2333  2339  2393  2399  2939  3119  3137  3733  3739  3793  3797  5939  7193  7331  7333  7393
/*
    Kotlin Program for
Find the all right truncatable primes in n natural numbers
*/
class TruncatablePrimes
{
	// Find all prime numbers which have smaller and equal to
	// given number n
	fun sieveOfEratosthenes(prime: Array < Boolean > , n: Int): Unit
	{
		// Initial two numbers are not prime (0 and 1)
		prime[0] = false;
		prime[1] = false;
		var i: Int = 2;
		// Initial 0 and 1 are not prime
		// We start to 2
		while (i * i <= n)
		{
			if (prime[i] == true)
			{
				var j: Int = i * i;
				// When i is prime number
				// Modify the prime status of all next
				// multiplier of location i
				while (j <= n)
				{
					prime[j] = false;
					j += i;
				}
			}
			i += 1;
		}
	}
	fun rightTruncatablePrime(n: Int): Unit
	{
		if (n <= 1)
		{
			return;
		}
		var prime: Array < Boolean > = Array(n + 1)
		{
			true
		};
		this.sieveOfEratosthenes(prime, n);
		print("\n Given n : " + n);
		print("\n");
		var i: Int = 2;
		while (i <= n)
		{
			if (prime[i] == true)
			{
				var temp: Int = i;
				while (temp > 0 && prime[temp] == true)
				{
					// Remove last digit
					temp = temp / 10;
				}
				if (temp == 0)
				{
					print(" " + i);
				}
			}
			i += 1;
		}
	}
}
fun main(args: Array < String > ): Unit
{
	val task: TruncatablePrimes = TruncatablePrimes();
	// Test A
	// n = 30
	/*
		2
		3
		5
		7
		23  2
		29  2
		----------
	*/
	task.rightTruncatablePrime(30);
	// Test B
	// n = 10000
	/*
	  2
	  3
	  5
	  7
	  23  2
	  29  2
	  31  3
	  37  3
	  53  5
	  59  5
	  71  7
	  73  7
	  79  7
	  233  23  2
	  239  23  2
	  293  29  2
	  311  31  3
	  313  31  3
	  317  31  3
	  373  37  3
	  379  37  3
	  593  59  5
	  599  59  5
	  719  71  7
	  733  73  7
	  739  73  7
	  797  79  7
	  2333  233  23  2
	  2339  233  23  2
	  2393  239  23  2
	  2399  239  23  2
	  2939  293  29  2
	  3119  311  31  3
	  3137  313  31  3
	  3733  373  37  3
	  3739  373  37  3
	  3793  379  37  3
	  3797  379  37  3
	  5939  593  59  5
	  7193  719  71  7
	  7331  733  73  7
	  7333  733  73  7
	  7393  739  73  7  
	  ----------------
	  [Remove right digit]
	  Example prime = 5939
	  5939
	  593
	  59
	  5
	  ----------------------
	  All is prime so 5939
	  right truncatable prime
	*/
	task.rightTruncatablePrime(10000);
}

Output

 Given n : 30
 2 3 5 7 23 29
 Given n : 10000
 2 3 5 7 23 29 31 37 53 59 71 73 79 233 239 293 311 313 317 373 379 593 599 719 733 739 797 2333 2339 2393 2399 2939 3119 3137 3733 3739 3793 3797 5939 7193 7331 7333 7393




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment