def is_fibonacci_loop_number(N):
"""判断一个数N是否是类斐波那契循环数"""
if N == 0:
return True
def find_max_fibonacci_loop_number():
"""在0到10^7范围内寻找最大的类斐波那契循环数"""
max_N = 10**7 # 问题定义的上界
print(find_max_fibonacci_loop_number())
"""判断一个数N是否是类斐波那契循环数"""
处理特殊情况:0的数列全为0,一定符合条件
if N == 0:
return True
# 将数字拆分为各位数字的列表,例如197 -> [1, 9, 7]
digits = list(map(int, str(N)))
# 获取数字的位数n,例如197的n=3
n = len(digits)
# 初始化数列S,前n项为数字的各位
sequence = digits.copy()
# 最多生成100项,避免无限循环(根据问题特性设置的阈值)
for _ in range(100):
# 计算新项:取当前序列的最后n项求和
next_val = sum(sequence[-n:])
# 发现新项等于目标数N,返回True
if next_val == N:
return True
# 若新项超过N,后续项只会更大,直接终止
if next_val > N:
return False
# 将新项添加到序列中
sequence.append(next_val)
# 循环100次仍未找到匹配项,返回False
return Falsedef find_max_fibonacci_loop_number():
"""在0到10^7范围内寻找最大的类斐波那契循环数"""
max_N = 10**7 # 问题定义的上界
# 从最大值开始倒序遍历,确保找到第一个符合条件的数即为最大值
for N in range(max_N, -1, -1):
# 检查当前数是否符合条件
if is_fibonacci_loop_number(N):
return N # 找到后立即返回
# 若未找到(理论上不会执行到这里)
return -1执行搜索并打印结果
print(find_max_fibonacci_loop_number())
0 回复
0 转发
0 喜欢
3 阅读



