Cyclic Number
Last Updated :
18 Sep, 2023
A cyclic number is an integer in which cyclic permutations of the digits are successive multiples of the number. The most widely known is the six-digit number 142857 (Please see below explanation given in examples).
The following trivial cases are typically excluded for Cyclic Numbers.
- Single digits, e.g.: 5
- Repeated digits, e.g.: 555
- Repeated cyclic numbers, e.g.: 142857142857
Given a number, check if it is cyclic or not.
Examples:
Input : 142857
Output : Yes
Explanation
142857 × 1 = 142857
142857 × 2 = 285714
142857 × 3 = 428571
142857 × 4 = 571428
142857 × 5 = 714285
142857 × 6 = 857142
We generate all cyclic permutations of the number and check if every permutation divides number of not. We also check for three conditions. If any of the three conditions is true, we return false.
C++
#include <bits/stdc++.h>
using namespace std;
#define ull unsigned long long int
bool isCyclic(ull N)
{
ull num = N;
int count = 0;
int digit = num % 10;
bool allSame = true ;
while (num) {
count++;
if (num % 10 != digit)
allSame = false ;
num = num / 10;
}
if (allSame == true )
return false ;
if (count % 2 == 0) {
ull halfPower = pow (10, count / 2);
ull firstHalf = N % halfPower;
ull secondHalf = N / halfPower;
if (firstHalf == firstHalf && isCyclic(firstHalf))
return false ;
}
num = N;
while (1) {
ull rem = num % 10;
ull div = num / 10;
num = ( pow (10, count - 1)) * rem + div ;
if (num == N)
break ;
if (num % N != 0)
return false ;
}
return true ;
}
int main()
{
ull N = 142857;
if (isCyclic(N))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
class GFG {
static boolean isCyclic( long N)
{
long num = N;
int count = 0 ;
int digit = ( int )(num % 10 );
boolean allSame = true ;
while (num > 0 ) {
count++;
if (num % 10 != digit)
allSame = false ;
num = num / 10 ;
}
if (allSame == true )
return false ;
if (count % 2 == 0 ) {
long halfPower = ( long )Math.pow( 10 , count / 2 );
long firstHalf = N % halfPower;
long secondHalf = N / halfPower;
if (firstHalf == firstHalf && isCyclic(firstHalf))
return false ;
}
num = N;
while ( true ) {
long rem = num % 10 ;
long div = num / 10 ;
num = ( long )(Math.pow( 10 , count - 1 ))
* rem
+ div;
if (num == N)
break ;
if (num % N != 0 )
return false ;
}
return true ;
}
public static void main(String[] args)
{
long N = 142857 ;
if (isCyclic(N))
System.out.print( "Yes" );
else
System.out.print( "No" );
}
}
|
Python3
def isCyclic(N):
num = N
count = 0
digit = (num % 10 )
allSame = True
while (num> 0 ):
count + = 1
if (num % 10 ! = digit):
allSame = False
num = num / / 10
if (allSame = = True ):
return False
if (count % 2 = = 0 ):
halfPower = pow ( 10 , count / / 2 )
firstHalf = N % halfPower
secondHalf = N / halfPower
if (firstHalf = = firstHalf and
isCyclic(firstHalf)):
return False
num = N
while ( True ):
rem = num % 10
div = num / / 10
num = pow ( 10 , count - 1 ) * rem + div
if (num = = N):
break
if (num % N ! = 0 ):
return False
return True
N = 142857
if (isCyclic(N)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG {
static bool isCyclic( long N)
{
long num = N;
int count = 0;
int digit = ( int )(num % 10);
bool allSame = true ;
while (num > 0)
{
count++;
if (num % 10 != digit)
allSame = false ;
num = num / 10;
}
if (allSame == true )
return false ;
if (count % 2 == 0) {
long halfPower = ( long )Math.Pow(10,
count / 2);
long firstHalf = N % halfPower;
if (firstHalf == firstHalf &&
isCyclic(firstHalf))
return false ;
}
num = N;
while ( true )
{
long rem = num % 10;
long div = num / 10;
num = ( long )(Math.Pow(10, count - 1))
* rem + div;
if (num == N)
break ;
if (num % N != 0)
return false ;
}
return true ;
}
public static void Main()
{
long N = 142857;
if (isCyclic(N))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}
|
PHP
<?php
function isCyclic( $N )
{
$num = $N ;
$count = 0;
$digit = ( $num % 10);
$allSame = true;
while ( $num > 0)
{
$count += 1;
if ( $num % 10 != $digit )
$allSame = false;
$num = (int)( $num / 10);
}
if ( $allSame == true)
return false;
if ( $count % 2 == 0)
{
$halfPower = pow(10, (int)( $count / 2));
$firstHalf = $N % $halfPower ;
$secondHalf = $N / $halfPower ;
if ( $firstHalf == $firstHalf &&
isCyclic( $firstHalf ))
return false;
}
$num = $N ;
while (true)
{
$rem = $num % 10;
$div = (int)( $num / 10);
$num = pow(10, $count - 1) * $rem + $div ;
if ( $num == $N )
break ;
if ( $num % $N != 0)
return false;
}
return true;
}
$N = 142857;
if (isCyclic( $N ))
print ( "Yes" );
else
print ( "No" );
?>
|
Javascript
<script>
function isCyclic(N)
{
let num = N;
let count = 0;
let digit = Math.floor(num % 10);
let allSame = true ;
while (num > 0) {
count++;
if (num % 10 != digit)
allSame = false ;
num = Math.floor(num / 10);
}
if (allSame == true )
return false ;
if (count % 2 == 0) {
let halfPower = Math.floor(Math.pow(10, count / 2));
let firstHalf = Math.floor(N % halfPower);
let secondHalf = Math.floor(N / halfPower);
if (firstHalf == firstHalf && isCyclic(firstHalf))
return false ;
}
num = N;
while ( true ) {
let rem = num % 10;
let div = Math.floor(num / 10);
num = Math.floor(Math.pow(10, count - 1))
* rem
+ div;
if (num == N)
break ;
if (num % N != 0)
return false ;
}
return true ;
}
let N = 142857;
if (isCyclic(N))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Output:
Yes
Reference :
https://en.wikipedia.org/wiki/Cyclic_number
.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...