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.

  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 :

  1. Create functions to check for palindromes and reverse numbers.
  2. Define a function that iterates a certain amount of times while looking for Lychrel numbers.
  3. Initialize a long integer variable with the number to be checked in the main function.
  4. Call the isLychrel function and store the result.
  5. Print the input number and the isLychrel function's result.
  6. 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

i<i < i<MAX_ITERATIONS; $i++) { number=number = number=number + reverse($number); if (isPalindrome($number)) return "false"; } return "true"; } // Function to check whether the number // is Palindrome function isPalindrome($number) { return number==reverse(number == reverse(number==reverse(number); } // Function to reverse the number function reverse($number) { $reverse = 0; while ($number > 0) { remainder=remainder = remainder=number % 10; reverse=(reverse = (reverse=(reverse * 10) + $remainder; number=(int)(number = (int)(number=(int)(number / 10); } return $reverse; } // Driver Code $number = 295; echo $number . " is lychrel? " . isLychrel($number); // This code is contributed by mits ?>

JavaScript

`

Output:

295 is lychrel ? true

Complexity Analysis :