返回

数字的「自整除性」

闲谈

定义

如果一个数字除以其自身的每个数字,所得结果都为整数,那么这个数字就是「自整除数」。

例如:128 是一个自整除数,因为 128 除以 1、2 和 8 都得到整数。

算法

我们可以使用 Python 的内置函数 range() 来生成一个数字列表,然后使用 filter() 函数来筛选出自整除数。

def self_dividing_numbers(left, right):
    """
    返回在 [left, right] 范围内的自整除数列表。

    参数:
        left: 整数,范围的左端点。
        right: 整数,范围的右端点。

    返回:
        列表,包含在 [left, right] 范围内的自整除数。
    """

    # 生成 [left, right] 范围内的数字列表
    numbers = range(left, right + 1)

    # 使用 filter() 函数筛选出自整除数
    self_dividing_numbers = list(filter(is_self_dividing_number, numbers))

    # 返回自整除数列表
    return self_dividing_numbers


def is_self_dividing_number(number):
    """
    判断一个数字是否为自整除数。

    参数:
        number: 整数,要判断的数字。

    返回:
        布尔值,如果 number 是自整除数,则返回 True,否则返回 False。
    """

    # 将数字转换为字符串
    number_str = str(number)

    # 遍历数字的每一位数字
    for digit in number_str:
        # 将数字转换为整数
        digit_int = int(digit)

        # 如果数字不为 0 且 number 除以 digit_int 的余数为 0,则继续检查下一个数字
        if digit_int != 0 and number % digit_int == 0:
            continue

        # 如果数字为 0 或 number 除以 digit_int 的余数不为 0,则返回 False
        else:
            return False

    # 如果所有数字都通过了检查,则返回 True
    return True

复杂度

时间复杂度:O(n * k),其中 n 是 [left, right] 范围内的数字个数,k 是每个数字的位数。

空间复杂度:O(n),因为我们使用列表来存储自整除数。

总结

自整除数是一个有趣的数学概念,我们可以使用 Python 的内置函数 range()filter() 来生成自整除数列表。