欧拉项目提高代码质量的系列任务

2022-08-21  本文已影响0人  Python_Camp

欧拉项目提高代码质量的系列任务见👇链接介绍
计算科学的数学之欧拉项目问题

Euler Problem 26https://projecteuler.net/problem=26Problem Statement: 一个单位分数的分子中含有1。分母为2至10的单位分数的十进制表示方法如下 给出了分母为2至10的单位分数的小数表示法。

1/3 = 0.(3)
1/4 = 0.25
1/5 = 0.2
1/6 = 0.1(6)
1/7 = 0.(142857)
1/8 = 0.125
1/9 = 0.(1)
1/10 = 0.1

其中0.1(6)意味着0.166666......,并且有1位数的重复周期。可见 可以看出,1/7有一个6位数的循环周期。找出d<1000的值,其中1/d包含最长的重复周期 在其小数部分中包含最长的循环周期。简洁有惊喜的写法

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

    for divide_by_number in range(numerator, digit + 1):
        has_been_divided: list[int] = []
        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()

print(solution(10, 1000))
983

print(solution(2000, 3000))
2971

课堂上深入讨论

上一篇 下一篇

猜你喜欢

热点阅读