Вычислить период Пизано с учетом длины последовательности и модуля - PullRequest
0 голосов
/ 06 мая 2020
#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

В приведенном выше фрагменте кода n - длина, а m - модуль. Моя первая функция, которая использует «i» в качестве итерации, не работает, но вторая функция, когда я удаляю «i», она успешно вычисляет период писано. Может ли кто-нибудь сказать мне, что пошло не так в первом, их лог c кажется таким же. Спасибо!

1 Ответ

1 голос
/ 06 мая 2020

В первой функции вы ищите элементы n, поэтому, если pisano происходит в более позднем индексе, ваша функция его пропускает. Во второй функции у вас есть бесконечное l oop, поэтому вы ищите, пока не найдете pisano.

Например, pisano(5,3) происходит, когда len(lis) = 10.

...