static ArrayList<Integer> continuedFraction(int num) { ArrayList<Integer> continuedFraction = new ArrayList<Integer>(); HashSet<Fraction> previousStates = new HashSet<Fraction>(); int maxRoot = (int) (Math.sqrt(num)); Fraction fraction = new Fraction(1, 0, 1, maxRoot * (-1), num); while (true) { previousStates.add(fraction); continuedFraction.add(fraction.nextInt()); if (previousStates.contains(fraction)) break; } return continuedFraction; }