如何确定使用皮萨诺周期计算斐波那契数和的最后一位的范围?
How to determine the range to calculate the last digit of the sum of Fibonacci numbers using Pisano Period?
我已经解决了这个问题。如果我理解正确的话,逻辑如下:因为我们需要斐波那契数和的最后一位,所以我们可以使用:
n mod 10 == (n % Pisano 10) mod 10
我的问题是总和的范围。我不知道如何找到它。由于 Pisano 10 = 60,最后一位数字以 60 为周期重复,所以我不需要计算从 0 到 N 的斐波那契值,但我不知道如何确定这个范围。
我找到了这个问题的解决方案,但我一直不明白他们是如何找到他们的范围的。例如:
def sum_fib_last(n):
if(n <= 1):
return n
previous = 0
current = 1
rem = n % 60 #60 is Pisano period of 10
for i in range(2, rem + 3):
previous, current = current, (previous + current) % 60
return(current-1) % 10
我不知道为什么范围是从 (2 到 rem+3) 以及为什么我们 return 斐波纳奇值减 1。
This solution 使用不同的范围:
def last_digit(n):
a, b = 0, 1
for i in range((n + 2) % 60):
a, b = b, (a + b) % 10
return 9 if a == 0 else a - 1
我需要帮助来理解这些范围是如何确定的,我不明白它们背后的逻辑。
他们应该更清楚一点。前n个斐波那契数的和是Fib(n + 2) - 1
。这个很容易用归纳法证明。
我已经解决了这个问题。如果我理解正确的话,逻辑如下:因为我们需要斐波那契数和的最后一位,所以我们可以使用:
n mod 10 == (n % Pisano 10) mod 10
我的问题是总和的范围。我不知道如何找到它。由于 Pisano 10 = 60,最后一位数字以 60 为周期重复,所以我不需要计算从 0 到 N 的斐波那契值,但我不知道如何确定这个范围。
我找到了这个问题的解决方案,但我一直不明白他们是如何找到他们的范围的。例如:
def sum_fib_last(n):
if(n <= 1):
return n
previous = 0
current = 1
rem = n % 60 #60 is Pisano period of 10
for i in range(2, rem + 3):
previous, current = current, (previous + current) % 60
return(current-1) % 10
我不知道为什么范围是从 (2 到 rem+3) 以及为什么我们 return 斐波纳奇值减 1。
This solution 使用不同的范围:
def last_digit(n):
a, b = 0, 1
for i in range((n + 2) % 60):
a, b = b, (a + b) % 10
return 9 if a == 0 else a - 1
我需要帮助来理解这些范围是如何确定的,我不明白它们背后的逻辑。
他们应该更清楚一点。前n个斐波那契数的和是Fib(n + 2) - 1
。这个很容易用归纳法证明。