Chuỗi Fibonacci là một chuỗi được biết rõ, trong đó mỗi mục nhập là tổng của hai mục trước và hai mục đầu tiên là 1. Nếu chúng ta lấy modulo của mỗi số hạng theo một hằng số, chuỗi sẽ trở thành định kỳ. Ví dụ: nếu chúng tôi quyết định tính toán trình tự mod 7, chúng tôi sẽ nhận được như sau:
1 1 2 3 5 1 6 0 6 6 5 4 2 6 1 0 1 1 ...
Điều này có một khoảng thời gian là 16. Một chuỗi liên quan, được gọi là chuỗi Pisano , được định nghĩa sao cho đó a(n)
là khoảng thời gian của chuỗi Wikipedia khi tính toán modulo n.
Bài tập
Bạn sẽ viết một chương trình hoặc hàm mà khi được cung cấp n
sẽ tính toán và xuất ra khoảng thời gian của mod trình tự Fibonacci n
. Đó là thuật ngữ thứ n trong chuỗi Pisano.
Bạn chỉ phải hỗ trợ số nguyên trên phạm vi 0 < n < 2^30
Đây là một cuộc thi golf-code, vì vậy bạn nên đặt mục tiêu giảm thiểu kích thước của mã nguồn theo số byte.
Các trường hợp thử nghiệm
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)
có thể mất tối đa n^2
mod giá trị n
. Vì vậy, n
giới hạn để 2^30
có thể kết thúc sản xuất một khoảng thời gian lên đến 2^60
. Hạn chế n <= 2^16
sẽ cung cấp P(n) <= 2^32
.
f(i+2) = f(i+1)+f(i)
, do đó, 'trạng thái' của máy lặp trong khoảng thời gian có thể được mô tả bằng một cặp số nguyên mod n
. Có nhiều nhất là n^2
các tiểu bang, vì vậy thời gian là nhiều nhất n^2
. Oh! Wikipedia tuyên bố rằng thời gian là nhiều nhất 6n
. Đừng bận tâm đến sự tầm thường của tôi.