Lychrel Number Implementation (original) (raw)
Last Updated : 23 Jul, 2025
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.
- Iterate given number of times
- Add number to it's reverse
- If the newly formed number is palindrome then return false // Number is not lychrel.
- 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++ `
// C++ Program to check whether the given number // is Lychrel Number or not with given limit // on number of iterations. #include using namespace std;
long reverse(long); bool isPalindrome(long);
// Max Iterations static int MAX_ITERATIONS = 20;
// Function to check whether number is // Lychrel Number string isLychrel(long number) { for (int i = 0; i < MAX_ITERATIONS; i++) { number = number + reverse(number);
if (isPalindrome(number))
return "false";
}
return "true";}
// Function to check whether the number is // Palindrome bool isPalindrome(long number) { return number == reverse(number); }
// Function to reverse the number long reverse(long number) { long reverse = 0; while (number > 0) { long remainder = number % 10; reverse = (reverse * 10) + remainder; number = number / 10; }
return reverse;}
// Driver program int main() { long number = 295; cout<<number << " is lychrel? " << isLychrel(number); }
// This code is contributed by Smitha
Java
// Java Program to check whether the given number // is Lychrel Number or not with given limit // on number of iterations. import java.io.*;
public class LychrelNumberTest { // Max Iterations private static int MAX_ITERATIONS = 20;
// Function to check whether number is Lychrel Number
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;
}
// Function to check whether the number is Palindrome
private static boolean isPalindrome(final long number)
{
return number == reverse(number);
}
// Function to reverse the 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;
}
// driver program
public static void main(String[] args)
{
long number = 295;
System.out.println(number + " is lychrel? "
+ isLychrel(number));
}}
Python3
Python3 Program to check whether the given number
is Lychrel Number or not with given limit
on number of iterations.
Max Iterations
MAX_ITERATIONS = 20;
Function to check whether number is
Lychrel Number
def isLychrel(number):
for i in range(MAX_ITERATIONS):
number = number + reverse(number);
if (isPalindrome(number)):
return "false";
return "true"; Function to check whether the number
is Palindrome
def isPalindrome(number):
return number == reverse(number); Function to reverse the number
def reverse(number):
reverse = 0;
while (number > 0):
remainder = number % 10;
reverse = (reverse * 10) + remainder;
number = int(number / 10);
return reverse; Driver Code
number = 295; print(number," is lychrel? ",isLychrel(number));
This code is contributed by mits
C#
// C# Program to check whether the given number // is Lychrel Number or not with given limit // on number of iterations. using System;
class GFG { // Max Iterations private static int MAX_ITERATIONS = 20;
// Function to check whether number is Lychrel Number
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;
}
// Function to check whether the number is Palindrome
private static bool isPalindrome( long number)
{
return number == reverse(number);
}
// Function to reverse the 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;
}
// Driver program
public static void Main()
{
long number = 295;
Console.Write(number + " is lychrel? "
+ isLychrel(number));
}}
// This code is contributed by vt_m.
PHP
JavaScript
`
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