如何确定使用Pisano周期计算斐波纳契数之和的最后一位的范围?

时间:2020-09-20 00:49:29

标签: python range fibonacci

我已经解决了这个问题。如果我正确理解逻辑,则逻辑如下:由于我们需要斐波纳契数之和的最后一位,因此可以使用:

?n mod 10 == (?n % Pisano 10) mod 10

我的问题是总和的范围。我不知道如何找到它。由于Pisano 10 = 60,所以最后一位重复60,所以我不需要计算从0到N的斐波那契值,但是我不知道如何确定该范围。

我找到了解决此问题的方法,但我从未理解他们如何找到范围。例如:

Original here

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),为什么我们返回Fibo值减去1。Similar solution

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

我需要帮助来了解如何确定这些范围,我不理解它们背后的逻辑。

1 个答案:

答案 0 :(得分:1)

它们应该更清晰一些。前n个斐波纳契数的总和为Fib(n + 2) - 1。这很容易通过归纳证明。

相关问题