解决了HackerRank上的一个问题。问题如下:输入是一个数字n
,需要输出序数为n的斐波那契数
在讨论中我发现了这个例子:
fib = lambda n:pow(2<<n,n+1,(4<<2*n)-(2<<n)-1)%(2<<n)
print(fib(int(input())))
这段代码的结果是正确的,但我绝对不明白它是如何工作的
解决了HackerRank上的一个问题。问题如下:输入是一个数字n
,需要输出序数为n的斐波那契数
在讨论中我发现了这个例子:
fib = lambda n:pow(2<<n,n+1,(4<<2*n)-(2<<n)-1)%(2<<n)
print(fib(int(input())))
这段代码的结果是正确的,但我绝对不明白它是如何工作的
关于句法结构:
"lambda" [параметры] ":" выражение
. 那些。:n
是一个参数pow(2<<n,n+1,(4<<2*n)-(2<<n)-1)%(2<<n)
- 表达pow(base, exp[, mod])
是用可选的模除法执行幂运算的函数的语法(即,我们得到除以的余数)。base
exp
mod
mod
2<<n
是一个论点base
n+1
是一个论点exp
(4<<2*n)-(2<<n)-1
是一个论点mod
x<<y
—二进制移位操作,等价:x * 2 ** y
和2<<n
等价:2 ** (n + 1)
。4<<2*n
- 移位操作的优先级低于乘法,因此等效为:4 * 2 ** (2 * n)
,否则:2 ** (2 * n + 2)
现在关于表达式的一般含义:
2 (n+1) (n+1)除以 2 (2*n+2) -2 (n+1) -1 的余数再除以 2 (n+1},结果是第二分区的剩余部分。
数学意义
值得从原作者的口中听到:
斐波那契数的整数公式。保罗·汉金
和中间版本:
斐波那契数字的乐趣。由票价里多
有点类似的问题: