🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
伟大的数学家莱昂纳多·皮萨诺,以笔名斐波那契闻名,为我们留下了著名的数列。从第三项开始,每一项都是前两项之和。
斐波那契数列定义如下:
Φ₀ = 0
Φ₁ = 1
Φₙ = Φₙ₋₁ + Φₙ₋₂,其中 n > 1
数列的开头如下:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
给定一个自然数 A。你的任务是——判断这个数是否属于斐波那契数列。如果是,则输出它的序号 N(索引),使得 Φₙ = A。如果数字 1 在数列中出现,假设其索引为 1。如果数字 A 不是斐波那契数,则输出 -1。
输入为一个非负整数 a(0 ≤ a ≤ 10¹⁸)。
输入一个整数:序列号 N,使得 Φ(n) = A。如果不存在这样的数,则输出 -1。
55
10
# Получаем на вход число A
a = int(input())
# Обрабатываем частный случай для 0
if a == 0:
print(0)
else:
# Инициализируем первые два члена последовательности и их индекс n.
# f0 соответствует φ(n-1), f1 соответствует φ(n)
f0, f1 = 0, 1
n = 1
# Используем цикл while для генерации чисел Фибоначчи,
# пока текущее число f1 меньше искомого числа a.
while f1 < a:
# Это "магия" Python для параллельного присваивания.
# Новое значение f0 становится старым f1,
# а новое f1 становится суммой старых f0 и f1.
# Это эквивалентно:
# temp = f1
# f1 = f0 + f1
# f0 = temp
f0, f1 = f1, f0 + f1
n += 1
# После выхода из цикла проверяем, почему он завершился.
# Если f1 равно a, значит, мы нашли число.
if f1 == a:
print(n)
# Если f1 стало больше a, значит, мы "проскочили" искомое число,
# и его нет в последовательности.
else:
print(-1)
🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
AD
广告
正在运行代码...