Ước chung Fibonacci

Đề bài

Mô tả

Dãy Fibonacci được định nghĩa bởi F1=1, F2=1 và Fn=Fn−1+Fn−2 với mọi n≥3.

Cho tập A={l,l+1,l+2,…,r}. Xét mọi tập con gồm đúng k phần tử của A. Với mỗi tập con {a1,a2,…,ak}, ta tính ước chung lớn nhất của các số Fibonacci mang chỉ số tương ứng:

g=gcd(Fa1,Fa2,…,Fak).

Trong tất cả các giá trị g thu được, gọi G là giá trị lớn nhất. Hãy in ra phần dư của G khi chia cho m.

Lưu ý thứ tự của hai phép toán: phải lấy giá trị lớn nhất trên các ước chung rồi mới chia lấy dư cho m, chứ không phải lấy giá trị lớn nhất của các phần dư.

Dữ liệu vào

Một dòng duy nhất chứa bốn số nguyên m, l, r, k cách nhau bởi dấu cách.

Dữ liệu ra

Một số nguyên duy nhất là phần dư của G khi chia cho m.

Ràng buộc

  • 1≤m≤109
  • 1≤l<r≤1012
  • 2≤k≤r−l+1

Ví dụ

Input Output Giải thích
10 1 8 2 3 Chọn tập con {4,8} cho gcd(F4,F8)=gcd(3,21)=3. Không tập con hai phần tử nào của {1,…,8} cho ước chung lớn hơn, nên G=3 và đáp án là 3mod10=3.
10 1 8 3 1 Với ba phần tử, tập con tốt nhất là {2,4,6} (hoặc {2,4,8}, {2,6,8}, {4,6,8}) cho gcd=F2=1. Không thể chọn ba số trong {1,…,8} cùng chia hết cho 3 trở lên, nên G=1 và đáp án là 1mod10=1.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0