【问题标题】:Calculate Pisano period given length of sequence and modulus在给定序列长度和模数的情况下计算 Pisano 周期
【发布时间】:2020-05-06 06:37:52
【问题描述】:
#This one doesn't work 
def pisano(n,m):
    lis=[]
    for i in range(n+1):
        if i<=1:
            lis.append(i)
        else:
            lis.append((lis[i-2]+lis[i-1])%m)
            if lis[-2:] == [0,1]:
                pisanoo = len(lis)-2
                rem = n%pisanoo
                print(rem)
                calc_fib(rem,m)
                break

#This one works 
def pisano(n,m):
    lis=[0,1]
    while True:
        lis.append((lis[-2]+lis[-1])%m)
        if lis[-2:] == [0,1]:
            pisanoo = len(lis)-2
            rem = n%pisanoo
            print(rem)
            calc_fib(rem,m)
            break

在上面的代码 sn-p 中,'n' 是长度,'m' 是模数。我第一个使用 'i' 作为迭代的函数失败了, 但是当我删除'i'时的第二个函数,它成功计算了皮萨诺周期。 有人能告诉我第一个问题出在哪里吗?他们的逻辑似乎是一样的。谢谢!

【问题讨论】:

    标签: python fibonacci


    【解决方案1】:

    在第一个函数中,您正在搜索 n 元素,因此如果 pisano 发生在稍后的索引中,您的函数会错过它。在第二个函数中,您有一个无限循环,因此您一直在搜索,直到找到 pisano。

    例如pisano(5,3) 发生在len(lis) = 10 时。

    【讨论】:

    • @WizArtifact 不用担心,它会发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多