【问题标题】:How to determine the range to calculate the last digit of the sum of Fibonacci numbers using Pisano Period?如何确定使用皮萨诺周期计算斐波那契数之和的最后一位数字的范围?
【发布时间】:2020-09-20 00:49:29
【问题描述】:

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

????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

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

【问题讨论】:

    标签: python range fibonacci


    【解决方案1】:

    他们应该更清楚一点。前 n 个斐波那契数的和是Fib(n + 2) - 1。这很容易通过归纳来证明。

    【讨论】:

      猜你喜欢
      • 2019-05-29
      • 2020-04-02
      • 2020-08-26
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      相关资源
      最近更新 更多