Java: Find the number of seed Lychrel number candidates and related numbers for n in the range 1..10000 inclusive.

Java Numbers: Exercise-5 with Solution

Write a Java program to find the number of seed Lychrel number candidates and related numbers for n in the range 1..10000 inclusive. (With a 500-iteration limit).

A 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. This process is sometimes called the 196-algorithm, after the most famous number associated with the process.
The first few Lychrel numbers are 196, 295, 394, 493, 592, 689, 691, 788, 790, 879, 887, ... .

Pictorial Presentation:

Java: Generate and show all Kaprekar numbers less than 1000

Sample Solution:

Java Code:

// https://rosettacode.org/
import java.math.BigInteger;
import java.util.*;
 public class Example5 {
     static Map<BigInteger, Tuple> cache = new HashMap<>();
     static class Tuple {
        final Boolean flag;
        final BigInteger bi;
        Tuple(boolean f, BigInteger b) {
            flag = f;
            bi = b;
     static BigInteger rev(BigInteger bi) {
        String s = new StringBuilder(bi.toString()).reverse().toString();
        return new BigInteger(s);
     static Tuple lychrel(BigInteger n) {
        Tuple res;
        if ((res = cache.get(n)) != null)
            return res;
        BigInteger r = rev(n);
        res = new Tuple(true, n);
        List<BigInteger> seen = new ArrayList<>();
         for (int i = 0; i < 500; i++) {
            n = n.add(r);
            r = rev(n);
            if (n.equals(r)) {
                res = new Tuple(false, BigInteger.ZERO);
             if (cache.containsKey(n)) {
                res = cache.get(n);
         for (BigInteger bi : seen)
            cache.put(bi, res);
         return res;
     public static void main(String[] args) {
         List<BigInteger> seeds = new ArrayList<>();
        List<BigInteger> related = new ArrayList<>();
        List<BigInteger> palin = new ArrayList<>();
        for (int i = 1; i <= 10_000; i++) {
            BigInteger n = BigInteger.valueOf(i);
             Tuple t = lychrel(n);
             if (!t.flag)
             if (n.equals(t.bi))
            if (n.equals(t.bi))
         System.out.printf("%d Lychrel seeds: %s%n", seeds.size(), seeds);
        System.out.printf("%d Lychrel related%n", related.size());
        System.out.printf("%d Lychrel palindromes: %s%n", palin.size(), palin);

Sample Output:

5 Lychrel seeds: [196, 879, 1997, 7059, 9999]                                                                 
244 Lychrel related                                                                                           
5 Lychrel palindromes: [196, 879, 1997, 7059, 9999]


Flowchart: Generate and show all Kaprekar numbers less than 1000

Java Code Editor:

Contribute your code and comments through Disqus.

Previous: Write a Java program to generate and show all Kaprekar numbers less than 1000.
Next: Write a Java program to generate and show the first 15 narcissistic decimal numbers.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.

Follow us on Facebook and Twitter for latest update.

Java: Tips of the Day


Checks if a value is positive power of two.

To understand how it works let's assume we made a call IsPowerOfTwo(4).

As value is greater than 0, so right side of the && operator will be evaluated.

The result of (~value + 1) is equal to value itself. ~100 + 001 => 011 + 001 => 100. This is equal to value.

The result of (value & value) is value. 100 & 100 => 100.

This will value the expression to true as value is equal to value.

public static boolean isPowerOfTwo(final int value) {
    return value > 0 && ((value & (~value + 1)) == value);

Ref: https://bit.ly/3sA5d4I


We are closing our Disqus commenting system for some maintenanace issues. You may write to us at reach[at]yahoo[dot]com or visit us at Facebook