📅  最后修改于: 2023-12-03 14:49:16.064000             🧑  作者: Mango
对于一个仅由数字 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 组成的给定数字的最小倍数的方式及代码实现。