def stable_expansion(digits, n): values = continued_fraction_cycle(n) h_values = [1, values[0]] # a_0 k_values = [0, 1] cycle_length = len(values) - 1 # we only cycle over a_1,...,a_{k-1} last = expanded_digits(h_values[1], k_values[1], digits) index = 1 relation = [1, values[index]] h_values = recurrence_next(relation, h_values) k_values = recurrence_next(relation, k_values) current = expanded_digits(h_values[1], k_values[1], digits) while current != last: index += 1 last = current relative_index = ((index - 1) % cycle_length) + 1 # we want residues 1,..,k-1 instead of the traditional 0,...,k-2 relation = [1, values[relative_index]] h_values = recurrence_next(relation, h_values) k_values = recurrence_next(relation, k_values) current = expanded_digits(h_values[1], k_values[1], digits) return current
def main(verbose=False): non_squares = [num for num in range(1, 10000 + 1) if not is_power(num, 2)] cycle_lengths = [len(continued_fraction_cycle(num)) - 1 for num in non_squares] return len([num for num in cycle_lengths if num % 2 == 1])