Obiekty BigInteger są niezmienialne tak samo jak obiekty String (napisy). Oznacza to, że gdy już raz utworzyłeś taki obiekt, nie możesz zmienić wartości jego pola/pól.
Oznacza to, że:
i.add(one)
nie zmienia zmiennej i, ponieważ ta metoda zwraca nowy obiekt BigInteger, który jest wynikiem operacji i + one ! Musisz nadpisać zmienną i, aby Twoja pętla zadziałała:
i = i.add(one)