Check whether a number is circular prime or not
We are given a number n. Our task is to check whether the number is circular prime or not.
Circular Prime : A prime number is said to be a circular prime if after any cyclic permutations of the digits, it remains a prime.
Examples:
Input : n = 113
Output : Yes
All cyclic permutations of 113 (311
and 131) are prime.
Input : 1193
Output : Yes
The idea is simple, we generate all permutations of given number and check each permutation for prime. To generate permutations, we one by one move last digit to first position.
C++
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
if (n % 2 == 0 || n % 3 == 0)
return false ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
}
bool checkCircular( int N)
{
int count = 0, temp = N;
while (temp) {
count++;
temp /= 10;
}
int num = N;
while (isPrime(num)) {
int rem = num % 10;
int div = num / 10;
num = ( pow (10, count - 1)) * rem + div ;
if (num == N)
return true ;
}
return false ;
}
int main()
{
int N = 1193;
if (checkCircular(N))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
|
Java
import java.lang.*;
class GFG
{
static boolean isPrime( int n)
{
if (n <= 1 )
return false ;
if (n <= 3 )
return true ;
if (n % 2 == 0 || n % 3 == 0 )
return false ;
for ( int i = 5 ; i * i <= n; i = i + 6 )
if (n % i == 0 || n % (i + 2 ) == 0 )
return false ;
return true ;
}
static boolean checkCircular( int N)
{
int count = 0 , temp = N;
while (temp> 0 ) {
count++;
temp /= 10 ;
}
int num = N;
while (isPrime(num)) {
int rem = num % 10 ;
int div = num / 10 ;
num = ( int )((Math.pow( 10 , count - 1 )) * rem)
+ div;
if (num == N)
return true ;
}
return false ;
}
public static void main (String[] args)
{
int N = 1193 ;
if (checkCircular(N))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python
import math
def isPrime(n) :
if (n < = 1 ) :
return False
if (n < = 3 ) :
return True
if (n % 2 = = 0 or n % 3 = = 0 ) :
return False
i = 5
while i * i < = n :
if (n % i = = 0 or n % (i + 2 ) = = 0 ) :
return False
i = i + 6
return True
def checkCircular(N) :
count = 0
temp = N
while (temp > 0 ) :
count = count + 1
temp = temp / 10
num = N;
while (isPrime(num)) :
rem = num % 10
div = num / 10
num = ( int )((math. pow ( 10 , count - 1 ))
* rem) + div
if (num = = N) :
return True
return False
N = 1193 ;
if (checkCircular(N)) :
print "Yes"
else :
print "No"
|
C#
using System;
class GFG {
static bool isPrime( int n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
if (n % 2 == 0 || n % 3 == 0)
return false ;
for ( int i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
}
static bool checkCircular( int N)
{
int count = 0, temp = N;
while (temp > 0)
{
count++;
temp /= 10;
}
int num = N;
while (isPrime(num))
{
int rem = num % 10;
int div = num / 10;
num = ( int )((Math.Pow(10, count -
1)) * rem) + div;
if (num == N)
return true ;
}
return false ;
}
public static void Main ()
{
int N = 1193;
if (checkCircular(N))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
PHP
<?php
function isPrime( $n )
{
if ( $n <= 1)
return false;
if ( $n <= 3)
return true;
if ( $n % 2 == 0 ||
$n % 3 == 0)
return false;
for ( $i = 5;
$i * $i <= $n ; $i = $i + 6)
if ( $n % $i == 0 ||
$n % ( $i + 2) == 0)
return -1;
return true;
}
function checkCircular( $N )
{
$count = 0;
$temp = $N ;
while ( $temp )
{
$count ++;
$temp =(int) $temp / 10;
}
$num = $N ;
while (isPrime( $num ))
{
$rem = $num % 10;
$div = (int) $num / 10;
$num = (pow(10, $count - 1)) *
$rem + $div ;
if ( $num == $N )
return true;
}
return -1;
}
$N = 1193;
if (checkCircular( $N ))
echo "Yes" , "\n" ;
else
echo "No" , "\n" ;
?>
|
Javascript
<script>
function isPrime(n)
{
if (n <= 1)
return false ;
if (n <= 3)
return true ;
if (n % 2 == 0 || n % 3 == 0)
return false ;
for (let i = 5; i * i <= n; i = i + 6)
if (n % i == 0 || n % (i + 2) == 0)
return false ;
return true ;
}
function checkCircular(N)
{
let count = 0, temp = N;
while (temp > 0)
{
count++;
temp = parseInt(temp / 10, 10);
}
let num = N;
while (isPrime(num))
{
let rem = num % 10;
let div = parseInt(num / 10, 10);
num = ((Math.pow(10, count - 1)) * rem) + div;
if (num == N)
return true ;
}
return false ;
}
let N = 1193;
if (checkCircular(N))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Output:
Yes
Time Complexity: O(N*N1/2)
Auxiliary Space: O(1)
Optimizations:
Clearly numbers containing 0, 2, 4, 5, 6, or 8 can never be circular primes as numbers ending with these will always be divisible by 2 or 5. Hence one of their permutation will not be a prime. While counting digits in first step, we can also check if current digit is one of these.
Last Updated :
30 Sep, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...