Skip to content

Solution for Euler Problem 26 #1939

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
May 3, 2020
Empty file.
41 changes: 41 additions & 0 deletions project_euler/problem_26/sol1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
"""
Euler Problem 26
https://projecteuler.net/problem=26
Find the value of d < 1000 for which 1/d contains the longest recurring cycle
in its decimal fraction part.
"""

def find_digit(numerator: int, digit: int) -> int:
"""
Considering any range can be provided,
because as per the problem, the digit d < 1000
>>> find_digit(1, 10)
7
>>> find_digit(10, 100)
97
>>> find_digit(10, 1000)
983
"""
the_digit = 1
longest_list_length = 0

for divide_by_number in range(numerator, digit + 1):
has_been_divided = []
now_divide = numerator
for division_cycle in range(1, digit + 1):
if now_divide in has_been_divided:
if longest_list_length < len(has_been_divided):
longest_list_length = len(has_been_divided)
the_digit = divide_by_number
else:
has_been_divided.append(now_divide)
now_divide = now_divide * 10 % divide_by_number

return the_digit


# Tests
if __name__ == "__main__":
import doctest

doctest.testmod()