📌  相关文章
📜  仅由数字 0 和 9 组成的给定数字的最小倍数(1)

📅  最后修改于: 2023-12-03 14:49:16.064000             🧑  作者: Mango

求仅由数字 0 和 9 组成的给定数字的最小倍数

对于一个仅由数字 0 和 9 组成的数,最小倍数即为该数的循环节。

我们可以将该数表示为一个长度为 n 的字符串 S,其中 S 的每一位只能是 0 或者 9。则我们可以得到该数的所有循环节为 S 的所有长度为 k(1<=k<=n)的子串。

则该数的最小倍数为将 S 重复多次后得到的新字符串,该新字符串的最小循环节为 S 的所有长度为 k(1<=k<=n)的子串中的最小公倍数。我们可以遍历所有长度 k 的子串,分别求出它们的最小公倍数,取其中的最小值即为新字符串的最小循环节。

下面是求该数最小循环节的 Python 代码示例:

def gcd(a, b):
    return gcd(b, a%b) if b else a

def lcm(a, b):
    return a * b // gcd(a, b)

def min_cycle(s):
    n = len(s)
    ans = n
    for i in range(1, n+1):
        if n % i != 0:
            continue
        flag = True
        for j in range(i, n):
            if s[j%i] != s[j]:
                flag = False
                break
        if flag:
            t = i
            for j in range(i, n):
                if s[j] != s[j%i]:
                    t = lcm(t, j-i+1)
            ans = min(ans, t)
    return ans

s = input().strip()
print(min_cycle(s))

该代码在输入一个仅由数字 0 和 9 组成的数后,会输出该数的最小倍数。

示例输入:

9090909

示例输出:

21

以上就是求仅由数字 0 和 9 组成的给定数字的最小倍数的方式及代码实现。