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
nVerildiğ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^2değer alabileceğini söylüyor n. Böylece, nsınırlı 2^30bir süre kadar üretebilir rüzgar kadar olabilir 2^60. Kısıtlama n <= 2^16verirdi 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^2devlet 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.