Python 3.x 给定一个正整数,确定它是否为';s是某些n的第n个斐波那契数

Python 3.x 给定一个正整数,确定它是否为';s是某些n的第n个斐波那契数,python-3.x,fibonacci,Python 3.x,Fibonacci,我试图找出某个斐波那契数的指数。但是,我的程序在键入1134903171后返回结果“您的程序执行时间太长。请检查代码是否存在无限循环或额外的输入请求” num = 1 num_prev = 1 n = int(input()) i = 1 if n < 2: print(1, 2) else: while i <= n + 2: num_prev, num = num, num + num_prev i += 1 if n == num:

我试图找出某个斐波那契数的指数。但是,我的程序在键入
1134903171
后返回结果“您的程序执行时间太长。请检查代码是否存在无限循环或额外的输入请求”

num = 1
num_prev = 1
n = int(input())
i = 1
if n < 2:
  print(1, 2)
else:
  while i <= n + 2:
    num_prev, num = num, num + num_prev
    i += 1
    if n == num:
      print(i + 1)
      break
    elif i == n + 3:
      print(-1)
      #break`
num=1
num_prev=1
n=int(输入())
i=1
如果n<2:
打印(1,2)
其他:

而我谢谢你们。最后一个代码的问题是:如果这个数不是斐波那契数,同时它太大,那么计算将需要许多循环。当我使用web编译器进行计算时,它们不允许这样的“无限”循环操作。然后我用数学方法来限制循环

import math
N=int(input())
root1=math.sqrt(5*N*N+4)
root2=math.sqrt(5*N*N-4)
i=1
num, num_prev = 1, 1
if root1%1==0 or root2%1==0:
  while i <= N+2:
    num_prev,num = num,(num+num_prev)
    i+=1
    if N==num:
      print(i+1)
      break
else:
  print(-1)

But the best answer could be:
prev, next = 1, 1
index = 2
possible_fib = int(input())
while possible_fib > next:
   prev, next = next, prev + next
   index += 1
 if possible_fib == next:
   print(index)
 else:
   print(-1)
导入数学
N=int(输入())
root1=math.sqrt(5*N*N+4)
root2=math.sqrt(5*N*N-4)
i=1
num,num_prev=1,1
如果root1%1==0或root2%1==0:
而我下一步:
上一个,下一个=下一个,上一个+下一个
指数+=1
如果可能,_fib==下一步:
打印(索引)
其他:
打印(-1)

python解释器从不响应
您的程序执行时间太长…
您要在哪里运行此程序?你试图用什么来加速你的程序?@hiroprotation它是
num\u prev,num=num,num+num\u prev
,而不是
num=num
。这是一个元组赋值。我希望你学会了在操作符周围放置空格的重要性。@FHTMitchell哦,你是对的;这些是逗号,而不是分号(无论如何这都是语法错误)。我的错。删除评论。谢谢亲爱的朋友。我用repl.it在网上做了一些练习。我知道有几种方法可以解决这个问题。