2016-07-06 8 views
0

Я хочу рассчитать период Pisano для любого целого числа 2 <= m <= 100000.Код для поиска Pisano Период с неправильным выводом

Этот код в настоящее время не работает для m>4, для m>4 Выходной результат: 9. Что я делаю неправильно в приведенном ниже коде.

def fib(n): 
    i=0 
    f=[] 
    while(i<=n): 
     f.append(i) 
     i+=1 
    i=2 
    while(i<=n): 
     f[i]=f[i-1]+f[i-2] 
     i+=1 
    return f[n] 

m=int(input()) 
j=2 
p=[0,1,1,2] 
while (p[j-1]!=1 and p[j-2]!=0): 

    h=fib(j)%m 
    p.append(h) 
    j+=1 

print(len(p)) 
+0

SO не является сервисом для отладки кода. Четко сформулируйте проблему с вашим кодом. – SiHa

+0

'p [-1] в p [: - 2]' not 'p [:: - 1]! = P [0:]' Понять сращивания http://stackoverflow.com/questions/509211/explain-pythons- slice-notation –

+0

@SiHa Этот код не показывает никакого выхода. Это означает, что последний цикл while каким-то образом становится бесконечным. –

ответ

1

Ваше состояние остановки является p[::-1] != p[0:], которая проверяет, является ли список палиндромический. Условие остановки должно быть, если список повторяется.

Один из способов сделать это было бы использовать рекуррентное соотношение, представляющее п их Фибоначчей номер, который по-прежнему имеет место по модулю м. Есть только два начальных значения, поэтому ...

+0

как я могу проверить, что –

+0

@GautamSagar: Это вам предстоит выяснить. Я уже дал один намек. Другим было бы проверить, будет ли список буквально повторяться, а это означает, что первая половина равна второй половине. Это будет медленнее, но все равно работает. – Blender

 Смежные вопросы

  • Нет связанных вопросов^_^