Lychrel Number Implementation
Last Updated :
11 Apr, 2023
Lychrel Number is a natural number that cannot form a palindrome through the iterative process of repeatedly reversing its digits and adding the resulting numbers. The process is sometimes called the 196-algorithm, after the most famous number associated with the process.
The first few numbers not known to produce palindromes when applying the 196-algorithm (i.e., a reverse-then-add sequence) are sometimes known as Lychrel numbers.
Examples:
Input : 56
Output : 56 is lychrel : false
Explanation : 56 becomes palindromic after one iteration :
56 + 65 = 121
Input : 196
Output : 196 is lychrel : true
Explanation : 196 becomes palindromic after 19 iterations :
196 + 691 = 887
887 + 788 = 1675
1675 + 5761 = 7436
7436 + 6347 = 13783
13783 + 38731 = 52514
....
16403234045 + 54043230461
70446464506 + 60546464407
The task is to find if a given number is Lychrel with a given limit on the number of iterations.
1. Iterate given number of times
1. Add number to it's reverse
2. If
the newly formed number is palindrome
then
return false // Number is not lychrel.
2. return true // Number is lychrel
Following are the steps to solve this problem :
- Create functions to check for palindromes and reverse numbers.
- Define a function that iterates a certain amount of times while looking for Lychrel numbers.
- Initialize a long integer variable with the number to be checked in the main function.
- Call the isLychrel function and store the result.
- Print the input number and the isLychrel function’s result.
- Run the program while changing the input numbers.
Below is the implementation of the above approach :
C++
#include<iostream>
using namespace std;
long reverse( long );
bool isPalindrome( long );
static int MAX_ITERATIONS = 20;
string isLychrel( long number)
{
for ( int i = 0; i < MAX_ITERATIONS; i++)
{
number = number + reverse(number);
if (isPalindrome(number))
return "false" ;
}
return "true" ;
}
bool isPalindrome( long number)
{
return number == reverse(number);
}
long reverse( long number)
{
long reverse = 0;
while (number > 0)
{
long remainder = number % 10;
reverse = (reverse * 10) + remainder;
number = number / 10;
}
return reverse;
}
int main()
{
long number = 295;
cout<<number << " is lychrel? "
<< isLychrel(number);
}
|
Java
import java.io.*;
public class LychrelNumberTest
{
private static int MAX_ITERATIONS = 20 ;
private static boolean isLychrel( long number)
{
for ( int i = 0 ; i < MAX_ITERATIONS; i++)
{
number = number + reverse(number);
if (isPalindrome(number))
return false ;
}
return true ;
}
private static boolean isPalindrome( final long number)
{
return number == reverse(number);
}
private static long reverse( long number)
{
long reverse = 0 ;
while (number > 0 )
{
long remainder = number % 10 ;
reverse = (reverse * 10 ) + remainder;
number = number / 10 ;
}
return reverse;
}
public static void main(String[] args)
{
long number = 295 ;
System.out.println(number + " is lychrel? "
+ isLychrel(number));
}
}
|
Python3
MAX_ITERATIONS = 20 ;
def isLychrel(number):
for i in range (MAX_ITERATIONS):
number = number + reverse(number);
if (isPalindrome(number)):
return "false" ;
return "true" ;
def isPalindrome(number):
return number = = reverse(number);
def reverse(number):
reverse = 0 ;
while (number > 0 ):
remainder = number % 10 ;
reverse = (reverse * 10 ) + remainder;
number = int (number / 10 );
return reverse;
number = 295 ;
print (number, " is lychrel? " ,isLychrel(number));
|
C#
using System;
class GFG
{
private static int MAX_ITERATIONS = 20;
private static bool isLychrel( long number)
{
for ( int i = 0; i < MAX_ITERATIONS; i++)
{
number = number + reverse(number);
if (isPalindrome(number))
return false ;
}
return true ;
}
private static bool isPalindrome( long number)
{
return number == reverse(number);
}
private static long reverse( long number)
{
long reverse = 0;
while (number > 0)
{
long remainder = number % 10;
reverse = (reverse * 10) + remainder;
number = number / 10;
}
return reverse;
}
public static void Main()
{
long number = 295;
Console.Write(number + " is lychrel? "
+ isLychrel(number));
}
}
|
PHP
<?php
$MAX_ITERATIONS = 20;
function isLychrel( $number )
{
global $MAX_ITERATIONS ;
for ( $i = 0; $i < $MAX_ITERATIONS ; $i ++)
{
$number = $number + reverse( $number );
if (isPalindrome( $number ))
return "false" ;
}
return "true" ;
}
function isPalindrome( $number )
{
return $number == reverse( $number );
}
function reverse( $number )
{
$reverse = 0;
while ( $number > 0)
{
$remainder = $number % 10;
$reverse = ( $reverse * 10) + $remainder ;
$number = (int)( $number / 10);
}
return $reverse ;
}
$number = 295;
echo $number . " is lychrel? " .
isLychrel( $number );
?>
|
Javascript
<script>
var MAX_ITERATIONS = 20;
function isLychrel(number)
{
for ( var i = 0; i < MAX_ITERATIONS; i++)
{
number = number + reverse(number);
if (isPalindrome(number))
return false ;
}
return true ;
}
function isPalindrome(number)
{
return number == reverse(number);
}
function reverse(number)
{
var reverse = 0;
while (number > 0)
{
var remainder = number % 10;
reverse = (reverse * 10) + remainder;
number = parseInt(number / 10);
}
return reverse;
}
var number = 295;
document.write(number + " is lychrel ? "
+ isLychrel(number));
</script>
|
Output:
295 is lychrel ? true
Complexity Analysis :
- Time Complexity : O(log N) ; it is because time complexity of the reverse and isPalindrome functions is O(log N), where N is the number of digits in the input number
- Auxiliary Space : O(1) ; this is constant since it does not depend on the input size
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...