Fibonacci dizisi 1. olan biz dizi periyodik hale gelecektir bir sabiti tarafından her dönem modüle almak durumunda her bir giriş önceki iki ve ilk iki girişlerinin toplamı olduğu bir iyi bildiği dizisidir. Örneğin, mod 7 sekansını hesaplamaya karar verirsek, aşağıdakileri elde ederiz:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Bunun 16 periyodu vardır. Pisano sekansı olarak adlandırılan ilgili bir sekans, a(n)
modulo n hesaplandığında fibonacci sekansının periyodu olacak şekilde tanımlanır .
Görev
n
Verildiğinde Fibonacci dizi modunun süresini hesaplayacak ve çıktısını alacak bir program veya işlev yazmalısınız n
. Bu, Pisano dizisindeki nci terimdir.
Yalnızca aralıktaki tam sayıları desteklemelisiniz 0 < n < 2^30
Bu bir kod golf yarışmasıdır, bu nedenle kaynak kodunuzun bayt cinsinden boyutunu küçültmeyi amaçlamalısınız.
Test senaryoları
1 -> 1
2 -> 3
3 -> 8
4 -> 6
5 -> 20
6 -> 24
7 -> 16
8 -> 12
9 -> 24
10 -> 60
11 -> 10
12 -> 24
f(i),f(i+1)
en fazla n^2
değer alabileceğini söylüyor n
. Böylece, n
sınırlı 2^30
bir süre kadar üretebilir rüzgar kadar olabilir 2^60
. Kısıtlama n <= 2^16
verirdi P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, böylece periyod boyunca döngü yapan bir makinenin 'durumu' bir çift tamsayı moduyla açıklanabilir n
. En fazla n^2
devlet vardır, bu yüzden dönem en fazladır n^2
. Ah! Wikipedia, dönemin en fazla olduğunu iddia ediyor 6n
. Önemsizliğimi boşver.